2017-06-09 13 views
0

私は#を削除しようとしています!私の角張ったサイトで、html5への移行。私は他のガイドを見てきましたが、私はそれらをlocationProviderで実装し、インデックスファイル内に置いています。あなたがリンクにng-hrefを通すとサイトはうまく動作しますが、リフレッシュを押すと/ urlを直接入力すると404エラーが発生します。私はこれがサーバー側と関係していることを読んでいました。それは、.otherwise()がhashbang関数であるため、404がヒットしたときにどこにルーティングするかを知らないということです。#を削除しています。 from Angels.js ASP.Net Web APIのURL

私はWebApiの設定を見て、次のように404を打つとデフォルトのrouteTemplateを指定していたことがわかりました。

// Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First(); 
     jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

すべてのヘルプは

答えて

3

を削除するには、プロジェクトに設定を追加します。ブラウザをリフレッシュすると、AngularJSルーティングが開始されず、代わりにブラウザがサーバーにリクエストを発行します。サーバーは目的の場所に何も見つからないので、404を返します。

質問に投稿した現在のサーバー側のルートは、Web APIへのリクエストを処理するだけです。

web apiルートに加えて、開始ページを配信するmvcルートを追加する必要があります。すでにMVCのルーティングを持っていない場合

あなたのスタートページがindex.htmlにあると仮定すると、App_StartでクラスRouteConfig、例えば(場所に、サーバ側のルート設定

//MVC 
RouteTable.Routes.Ignore("api/{*url}"); // ignore api routes for mvc 
RouteTable.Routes.MapPageRoute("NonAPIRoute", "{*url}", "~/index.html"); 

に次のルーティングを追加フォルダ)の場合、RouteConfigクラスは次のようになります。

using System.Web.Mvc; 
using System.Web.Routing; 

namespace WebApplication1 
{ 
    public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.IgnoreRoute("api/{*pathInfo}"); // ignore api routes 
      routes.MapPageRoute("NonAPIRoute", "{*url}", "~/index.html"); 
     } 
    } 
} 
+0

mapHttpRouteラインを提供する前に、このignoreRouteを追加する必要があると言っていますか? 'config.Routes.IgnoreRoute(routeName:" DefaultApi "、routeTemplate:" api/{コントローラ}/{id} "); // mvcのAPIルートを無視する ' –

+0

あなたは既に既存のmvcルーティングを用意していますか? –

+0

MVCルーティングは、text/html要求に対する通常のget要求に応答するためのものです。 Web APIがデータを提供し、MVCがページを提供します。それがmvcルーティングが必要な理由です。 もう1つのオプションは、コンテンツタイプがtext/htmlのindex.htmlのコンテンツを返すだけのAPIコントローラを作成することです。または、あなたのiisの設定でURL書き換えを試すことができます –

0

をいただければ幸いあなたは正しく述べたように、問題はサーバ側にあるHTML5モードを有効にして、接頭辞

.config(['$locationProvider', function($locationProvider) { 
    $locationProvider.hashPrefix(''); // by default '!' 
    $locationProvider.html5Mode({ 
     enabled: true 
    }); 
}]); 
+0

はい私はすでにこれを行っています。上記のとおり、これは正常に動作しますが、URLを入力してページをリフレッシュ/リダイレクトすると、404エラーが発生します。 –

関連する問題