我注意到,即使我在网址前加/(F())/
这是无稽之谈,对我的ASP.NET网络应用程序的请求也会成功。通常的行动方法很受欢迎。 Request.Url
不显示网址前缀。因此,如果我请求/(F())/x
,则操作会看到Request.Url == "/x"
然后我尝试了其他ASP.NET MVC站点,例如Stack Overflow:
根据Fiddler的说法,请求按预期进行:
正如您所看到的,请求URL是正确的,并且服务器在没有重定向的情况下回复完整内容。浏览器窗口也显示该URL。
此网址 有效。因此,我得出结论,框架中的 something 会导致重写此请求并删除前缀。看起来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附带的巨大功能海洋中的罪魁祸首。谁知道默认打开哪些功能?!我认为没有人真正知道:)
至少这是一个搜索引擎优化问题,但我发现不知道发生了什么也令人不安。这就是我正在调查的原因。 这是什么行为以及如何摆脱它?
答案 0 :(得分:6)
这是由ASP.NET cookieless feature set引起的。现在,URL可能如下所示:
http://example.com/MyWebApplication/(A(XXXX)S(XXXX)F(XXXX))/home.aspx
打破它:
由于无cookie模式完全过时,导致SEO问题和混乱,我强烈建议立即禁用所有ASP.NET网站上所有可能的无cookie功能。
对于上述每个功能(表单身份验证,匿名身份验证和会话状态),您可以控制是否以及何时使用无Cookie功能,以及何时使用无Cookie功能。控制它的配置设置是: cookieless =" UseCookies | UseUri | UseDeviceProfile |自动检测"
在我的情况下,我设置:
<anonymousIdentification enabled="false" />
<sessionState ... cookieless="UseCookies" />
您需要根据自己的需要进行调整。
这有希望解决这些URL的生成,但似乎并不妨碍框架(默默地)接受这样的URL。 The documentation claims that a header AspFilterSessionId
will be present但我发现事实并非如此。
目前我没有阻止请求到这些不需要的网址的解决方案。