2016-05-13 95 views
2

我說的沒錯,Web API可以在OWIN上運行,而MVC 5不能?MVC 5,Web API和Owin

所以在我的項目,我仍然需要我的Global.asax與public class WebApiApplication : System.Web.HttpApplication

目前,我有我的owin Startup.cs看起來像這樣:

public void Configuration(IAppBuilder app) 
{ 
    var httpConfig = new HttpConfiguration 
    { 

    }; 


    WebApiConfig.Register(httpConfig); 

    app.UseWebApi(httpConfig); 
    app.UseCors(CorsOptions.AllowAll); 

    RouteConfig.RegisterRoutes(RouteTable.Routes);//MVC Routing 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
} 

是RouteConfig.RegisterRoutes(RouteTable。路線)?

每當我瀏覽到任何MVC的路線,我收到了404

+1

編號MVC5使用OWIN。 WebApi是並且完全沒有必要。 vNext再次統一所有內容。甚至在vNext之前,WebApi從來沒有提供過一個單獨的事情,即你無法在MVC中與幾個助手一起做自己,或者從安裝幾個nuget包來提供內容協商等內容。 –

回答

1

我說的是正確的,Web API可以在OWIN上運行,而MVC 5不能?

不清楚你問什麼,但OWIN不是服務器,但它是一箇中間件,幫助注入管道,以預處理階段中的請求,它不依賴於的WebAPI或MVC版本,但它取決於是否託管服務器已經實施了OWIN規範。

RouteConfig.RegisterRoutes(RouteTable.Routes)就夠了嗎?

是的,這將適用於Asp.net MVC,但對於web api,您需要在單獨的配置類中註冊路由。通常的WebAPI配置可能在默認Asp.net的WebAPI模板(> vs2013)指定像

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API routes 
     config.MapHttpAttributeRoutes(); 

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

確保網址你的要求相匹配無論是MVC或路線的WebAPI模板。

+0

感謝您的澄清,mvc路線沒有被拿起。這很奇怪。看不到我可能做錯了。 –

5

是的,你說得對,MVC 5(總部設在ASP.NET 4)需要IIS,它不能自我主機。 MVC 6(基於ASP.NET 5,現在稱爲ASP.NET Core 1)沒有此限制。如果您需要自主託管,請開始使用ASP.NET Core 1(非常棒),或者如果您現在需要使用RTM,請使用WebAPI。