为什么所有ASP.NET MVC网站都允许并忽略任何URL前面的字符串"/(F())/"?

usr*_*usr 11 asp.net iis asp.net-mvc

我注意到,即使我的URL前缀/(F())/是废话,我的ASP.NET Web应用程序的请求也会成功.通常的行动方法很受欢迎.Request.Url没有显示URL前缀.所以,如果我要求/(F())/x行动看到Request.Url == "/x"

然后我尝试了其他ASP.NET MVC站点,例如Stack Overflow:

https://stackoverflow.com/(F())/questions/43593952/why-do-all-asp-net-mvc-websites-allow-and-ignore-the-string-f-in-front-o

根据Fiddler的说法,正在按照预期提出要求:

在此输入图像描述

正如您所看到的,请求URL是正确的,服务器在没有重定向的情况下回复完整内容.浏览器窗口也显示该URL.

此URL 确实有效.因此,我得出结论,框架中的某些内容会导致重写此请求并删除前缀.看起来Stack Overflow应用程序不知道前缀.

在Windows 7上的.NET 4.6.2上的Visual Studio 2017中创建的新MVC应用程序中也会出现相同的结果.

另一个有趣的受害者:https://www.microsoft.com/(F(blah))/ en-us/default.aspx(微软主页).

字符串(F())并不特别.查看其他有用的字符串的注释,例如/(F(pV0)).

由于我的ASP.NET代码对原始URL(Request.Url不包含前缀)视而不见,我似乎甚至无法检测到这种情况并使请求失败.

我还没有确认这是一个MVC问题.似乎很难找到ASP.NET + IIS附带的巨大功能海洋中的罪魁祸首.谁知道默认打开哪些功能?!我认为没有人真的知道:)

至少这是一个搜索引擎优化问题,但我发现它也令人不安,不知道发生了什么.这就是我正在调查的原因.这是什么行为以及如何摆脱它?

usr*_*usr 6

这是由ASP.NET cookieless功能集引起的.URL现在可能如下所示:

http://example.com/MyWebApplication/(A(XXXX)S(XXXX)F(XXXX))/home.aspx

打破它:

  • A(XXXX):这是Anonymous-ID.它用于标识访问您的应用程序的(匿名)用户.字符串可能会也可能不会被加密,具体取决于部分中的配置设置.
  • S(XXXX):这是Session-ID(与V1.1相同).
  • F(XXXX):这是表单身份验证票证.

由于无cookie模式完全过时,导致SEO问题和混乱我建议立即禁用所有ASP.NET网站上所有可能的cookieless功能.

对于上述每个功能(表单身份验证,匿名身份验证和会话状态),您可以控制是否以及何时使用无cookie功能,以及何时使用无Cookie功能.控制它的配置设置是:cookieless ="UseCookies | UseUri | UseDeviceProfile | AutoDetect"

在我的情况下,我设置:

<anonymousIdentification enabled="false" />
<sessionState ... cookieless="UseCookies" />
Run Code Online (Sandbox Code Playgroud)

您需要根据自己的需要进行调整.

这有望解决这些URL 的生成问题,但似乎并不妨碍框架(静默)接受这样的URL.该文档声称将出现标题AspFilterSessionId,但我发现情况并非如此.

目前我没有阻止对这些不需要的URL的请求的解决方案.