【问题标题】:WebAPI + MVC + Owin: MVC routes don't workWebAPI + MVC + Owin:MVC 路由不起作用
【发布时间】:2017-10-06 14:27:25
【问题描述】:

我有一个带有 OWIN 的 WebAPI 2 应用程序。现在我正在尝试将 MVC 5 控制器添加到所有内容,但找不到我的 MVC 路由。我收到以下错误:

未找到与请求 URI 'https://localhost:44320/home' 匹配的 HTTP 资源。

找不到与名为“home”的控制器匹配的类型。

控制器名称正确(HomeController),它是公开的,我正在 Global.asax 中配置路由:

protected void Application_Start()
{
    HttpConfiguration config = GlobalConfiguration.Configuration;
    ModelBinderConfig.RegisterModelBinders(config.Services);
    GlobalConfiguration.Configure(WebApiConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

我也有 OWIN 启动类:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var config = GlobalConfiguration.Configuration;

        var globalExceptionHandler = GetGlobalExceptionHandlerConfiguration();
        config.Services.Replace(typeof(IExceptionHandler), globalExceptionHandler);
        app.UseWebApi(config);
    }
}

我注意到,当我注释掉 app.UseWebApi(config) 行时,MVC 路由再次开始工作。

有谁知道发生了什么以及如何解决这个问题?

谢谢

【问题讨论】:

  • 我相信你需要在你的 mvc 路由之后注册你的 webapi 路由。这可以在Application_Start 中完成,方法是将GlobalConfiguration.Configure(WebApiConfig.Register); 移动到RouteConfig.RegisterRoutes(RouteTable.Routes); 下方
  • @peinearydevelopment:我试过了,还是出现同样的错误

标签: asp.net-mvc asp.net-mvc-5 asp.net-web-api2 owin


【解决方案1】:

app.UseWebApi() 命令是用于 OWIN 自托管,与 MVC 不兼容,因此您只能在您的项目是专门的 Web Api 项目时使用它。只需将其删除,您就可以了。

【讨论】:

    【解决方案2】:

    尝试在您的 RouteConfig.cs 文件中添加此代码。

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

    【讨论】:

    • 感谢您的回答,但我已经这样做了。如果我注释掉我提到的那一行,这些路线就会起作用。所以路由配置正确。
    【解决方案3】:

    在我的情况下,我必须将所有配置从上面帖子中的 Application_Start 移动到 Startup.Configuration 替换 app.UseWebApi(config);

    【讨论】:

      【解决方案4】:

      这对我来说是 owin 启动课程的工作。

      // instead of : app.UseWebApi(GlobalConfiguration.Configuration)    
      app.UseWebApi(new HttpConfiguration());
      

      【讨论】:

        猜你喜欢
        • 2019-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-10
        • 2014-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多