gpt4 book ai didi

asp.net-mvc - 如何使用带有点/句点的基于 MVC5 属性的路由?

转载 作者:行者123 更新时间:2023-12-04 22:45:37 26 4
gpt4 key购买 nike

我基本上有一个开箱即用的 MVC 5.2 应用程序,启用了基于属性的路由(从提供的 routes.MapMvcAttributeRoutes(); 方法调用 RouteConfig.RegisterRoutes(RouteCollection routes))。

以下是在 HomeController 中:

    [Route("hello.txt")]
[Route("hellotxt-testing")]
public ActionResult ShowFile()
{
return Content("Hello world");
}

我可以成功访问 /hellotxt-testing (证明基于属性的路由工作正常):

accessing /hellotxt-testing

但是如果我访问 /hello.txt,我会得到一个 404 页面:

accessing /hello.txt

对比我去的时候 /hello404 ,在那里我得到了一个不同的 404 页面:

accessing /hello404

我猜第二个 404 页面来自 ASP.NET,而第一个来自 IIS,它甚至没有将请求传递给 ASP.NET?

我该怎么做才能确保我可以确保 ASP.NET 获得这些带有句点的 URL?是否还有其他“特殊”字符也会导致问题?

最佳答案

您看到的错误之间的区别是因为当您尝试访问 /hello.txt 时另一方面,IIS 尝试访问位于服务器上的静态资源文件 /hello404只是一个未知的路线,所以 404 被抛出。

为了确保我是正确的,请尝试在末尾添加斜杠并访问 /hello.txt/你现在应该得到 404 错误。

有几种方法可以解决这个问题:

第一 你可以试试

<modules runAllManagedModulesForAllRequests="true">

但是这个选项叫做 RAMMFAR hurts the performance of web application.并有其他后果。

第二 您可以为 IIS URL REWRITE 创建规则为 always add trailing slash to each incoming URL's

第三 一起去 Dots in URL causes 404 with ASP.NET mvc and IIS
<add name="ApiURIs-ISAPI-Integrated-4.0"
path="/people/*"
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />

但你不喜欢这个。

第四 尝试创建自定义 http 处理程序以向所有请求添加尾部斜杠,如本主题 Add a trailing slash at the end of each url?

我会和 一起去第二个选项,如果您需要它在应用程序的许多地方工作。

但我认为最好的是 第三个 .这种带有点的网址对用户不友好,并且违反了 SEO 规则。您应该避免在公开网站上使用它们。所以假设你只需要一个 Controller 并且路由这个选项是最快和最干净的一个。

关于asp.net-mvc - 如何使用带有点/句点的基于 MVC5 属性的路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27872820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com