2016-05-13 83 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。