2016-09-28 97 views
1

我在ASP .NET MVC5中使用WebApis創建SPA(單頁應用程序)。 對於WebAP我使用屬性路由。對於除網絡API其他請求,我已經配置了映射到Home控制器和索引操作 這裏一個包羅萬象的路線是我的代碼使用IAppBuilder.UseWebApi時的問題

我在StartUp.cs下面的配置代碼文件

using System.Web.Routing; 

[assembly: OwinStartup(typeof(MyApp.Startup))] 

namespace MyApp 

{ 

public class Startup 
{ 

    public void Configuration(IAppBuilder app) 
    { 

     GlobalConfiguration.Configure(WebApiConfig.Register); 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles);    


     //app.UseWebApi(GlobalConfiguration.Configuration); 

    } 

} 
} 

我WebApiConfig.Register方法如下

public static class WebApiConfig 
    { 
    public static void Register(HttpConfiguration config) 
    { 

     config.MapHttpAttributeRoutes(); 

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

    } 
} 

對於除WebApis等航線,我有以下途徑註冊

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "CatchAll", 
      url: "{*url}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

    } 
} 
在啓動類的配置方法

現在,如果我去掉這一行

 app.UseWebApi(GlobalConfiguration.Configuration) 

,並嘗試訪問任何路線,我得到這個錯誤

<Error> 
    <Message> 
    No HTTP resource was found that matches the request URI 'http://localhost:17212/orders'. 
    </Message> 
    <MessageDetail> 
    No type was found that matches the controller named 'Home'. 
    </MessageDetail> 
</Error> 

爲什麼會出現這種情況?保持這條線是否可以評論?

+0

考慮遷移到asp.net核心 –

+0

您正在混合配置。 'app.UseWebApi'主要用於OWIN管道而不是MVC,所以當你使用這個設置時就會否定你的MVC配置,因爲它接管了傳入請求的檢查。如果您正在混合使用MVC和Web API,則可以安全地保留該行的註釋。 – Nkosi

+0

如果你可以添加這個答案,我可以標記爲答案 – devanalyst

回答

2

您正在混合配置。 app.UseWebApi主要用於OWIN管道而不是MVC,因此當您使用該設置時,它會取消您的MVC配置,因爲它接管傳入請求的檢查。如果您正在混合使用MVC和Web API,則可以安全地保留該行的註釋。