c# - 使用 IAppBuilder.UseWebApi 时出现问题

标签 c# asp.net-mvc-5 routes asp.net-web-api2 owin

我正在 ASP .NET MVC5 中使用 WebApis 创建一个 SPA(单页应用程序)。 对于 WebAPI,我使用的是属性路由。对于 Web API 以外的请求,我配置了一个映射到 Home Controller 和 Index 操作的 Catch-All 路由 这是我的代码

我的 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 }
        );

    }
}

现在在 StartUp 类的 Configuration 方法中,如果我取消注释这一行

        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>

为什么会这样?可以保留此行注释吗?

最佳答案

您正在混合配置。 app.UseWebApi 主要用于 OWIN 管道而不是 MVC,因此当您使用该设置时,它会否定您的 MVC 配置,因为它会接管传入请求的检查。如果您混合使用 MVC 和 Web API,您可以安全地对该行进行注释。

关于c# - 使用 IAppBuilder.UseWebApi 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39746625/

相关文章:

c# - ASP.NET MVC 验证在加载页面后显示错误

c# - 桌面桥toast打开应用程序

c# - 为多语言站点配置 ASP.NET MVC 属性路由

algorithm - 有没有可能用蚁群优化来代替OSPF路由协议(protocol)的算法?

c# - Windows 7 不允许我编辑 Common Application Data 文件夹中的文件

c# - 如何将参数传递给带有特殊字符的 WCF Web 服务?

asp.net-mvc - 禁用并指定 Html.DropDownList 的默认选择

jquery - MVC 5 : Loading content area via Ajax and modify browser url

asp.net-mvc - 如何允许用户仅编辑目录中的详细信息

ruby-on-rails - 如何干掉使用 'Module'的资源路由