c# - ASP.NET MVC5 拒绝映射与物理路径匹配的路由

标签 c# asp.net-mvc model-view-controller routing attributerouting

当我使用 IIS Express 调试/运行并浏览到 http://localhost:1234/People 时,IIS Express 尝试浏览 People 目录而不是执行 People 路由,我收到 403.14 HTTP 错误。因此,我在 Web.config 中禁用了 StaticFile 处理程序并进行了刷新。现在我收到 404.4 HTTP 错误:

404

我知道该路由有效,因为如果我重命名 RoutePrefix,例如PeopleTest,然后路由被执行,我得到了我期望的响应。

我如何说服 IIS/Express 优先使用 MVC 路由而不是静态文件/目录?

我正在使用属性路由;相关代码如下:

Web.config

<system.webServer>
    <modules>
        <remove name="FormsAuthentication" />
    </modules>

    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <remove name="OPTIONSVerbHandler" />
        <remove name="TRACEVerbHandler" />
        <remove name="StaticFile"/>
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

Global.asax

GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AutofacConfig.Configure();

启动\WebApiConfig

namespace MyApi.Startup {
    public static class WebApiConfig {
        public static void Register(HttpConfiguration config) {
            config.MapHttpAttributeRoutes();
        }
    }
}

People\PeopleController

namespace MyApi.People {
    [RoutePrefix("People")]
    public partial class PagesController : BaseController {
        [Route]
        [HttpGet]
        [ResponseType(typeof(IEnumerable<Person>))]
        public IHttpActionResult Get() { ... }
    }
}

请注意,由于我使用的是属性路由,因此我使用的是非标准文件夹结构。例如。我没有 Controllers/Models/Views 文件夹,而是每个业务领域都有根文件夹(例如 ~\People 包含“People”业务领域的 controllers/models/etc) .

我尝试过的

  1. 设置 RAMMFAR。
  2. 删除并重新添加 ExtensionlessUrlHandler-Integrated-4.0

最佳答案

通过添加设置 RouteExistingFiles = true 修复:

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

这样 ASP.NET 路由将处理所有路由:https://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.routeexistingfiles(v=vs.110).aspx

关于c# - ASP.NET MVC5 拒绝映射与物理路径匹配的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315276/

相关文章:

c# - 尝试创建 X 类型的 Controller 时出错。请确保 Controller 具有无参数构造函数

c# - WebClient 忽略 ServicePointManager.ServerCertificateValidationCallback?

c# - 使用请求参数的自定义名称

java - 我如何在 MVC-gui 中使用 JUNG2?

php - 如何验证restful api中post的数据

c# - 文本输入布局 Xamarin(C#)

c# - 创建文件快捷方式 (.lnk)

c# - 使用 Linq 查询解析 List<CustomClass> 中的 XML

c# - ASP MVC 过滤器,在哪里实现接口(interface)?

asp.net-mvc - ASP.NET MVC 从操作中注入(inject)部分 View 的简洁方法