Mar*_*ark 298 iis asp.net-mvc iis-7 iis-express iis-8
我有一个项目,要求我的URL在路径中有点.例如,我可能有一个URL,例如www.example.com/people/michael.phelps
带点的网址生成404.我的路由很好.如果我通过michaelphelps,没有圆点,那么一切正常.如果我添加点我得到404错误.示例站点在带有IIS8 Express的Windows 7上运行.URLScan未运行.
我尝试将以下内容添加到我的web.config中:
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有什么区别.我刚收到404.0 Not Found错误.
这是一个MVC4项目,但我不认为这是相关的.我的路由工作正常,我期望的参数在那里,直到它们包含一个点.
我需要配置什么才能在网址中加点?
Mar*_*ark 371
我通过编辑我的网站的HTTP处理程序来完成这项工作.为了我的需要,这很有效并解决了我的问题.
我只是添加了一个新的HTTP处理程序,用于查找特定的路径条件.如果请求匹配,则将其正确发送到.NET进行处理.对于URLRewrite破解或启用RAMMFAR的解决方案,我感到非常高兴.
例如,要让.NET处理URL www.example.com/people/michael.phelps,请将以下行添加到system.webServer / handlers
元素中的站点web.config :
<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" />
Run Code Online (Sandbox Code Playgroud)
编辑
还有其他帖子表明此问题的解决方案是RAMMFAR
或RunAllManagedModulesForAllRequests
.启用此选项将为所有请求启用所有托管模块.这意味着静态文件(如图像,PDF和其他所有内容)将在不需要时由.NET处理.除非您有特定的案例,否则最好不要使用此选项.
Tad*_*aia 46
经过一番探讨之后,我发现relaxUrlToFileSystemMapping对我来说根本不起作用,在我的情况下工作的是将RAMMFAR设置为true,同样适用于(.net 4.0 + mvc3)和(.net 4.5 + mvc4).
<system.webserver>
<modules runAllManagedModulesForAllRequests="true">
Run Code Online (Sandbox Code Playgroud)
在设置RAMMFAR真正的Hanselman关于RAMMFAR和性能的帖子时要注意
Tom*_*mmy 27
我相信你必须在你的web.config中设置属性relaxedUrlToFileSystemMapping. 哈克不久前写了一篇关于这篇的文章(还有一些其他的SO帖子提出了相同类型的问题)
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true" />
Run Code Online (Sandbox Code Playgroud)
小智 23
很长一段时间我在这个问题上遇到了所有不同的补救措施而无济于事.
我注意到,当在包含点[.]的URL的末尾添加正斜杠[/]时,它没有抛出404错误,它实际上有效.
我终于使用像IIS URL Rewrite这样的URL重写器来解决问题,以监视特定模式并附加训练斜杠.
我的URL看起来像这样:/Contact/~firstname.lastname所以我的模式很简单:/Contact/~(.*[^/])$
我从Scott Forsyth那里得到了这个想法,请看下面的链接:http: //weblogs.asp.net/owscott/handing-mvc-paths-with-dots-in-the-path
V.B*_*.B. 21
只需将此部分添加到Web.config,即使pathInfo中有点,指定处理程序也将处理对路径/ {*pathInfo}的所有请求.(取自ServiceStack MVC Host Web.config示例和此答案/sf/answers/850605101/)
这应该适用于IIS 6和7.您可以通过修改'add'元素中的path ="*"将特定处理程序分配到'route'之后的不同路径
<location path="route">
<system.web>
<httpHandlers>
<add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" />
</httpHandlers>
</system.web>
<!-- Required for IIS 7.0 -->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud)
MVC 5.0解决方法.
许多建议的答案在MVC 5.0中似乎不起作用.
由于最后一节中的404点问题可以通过使用尾部斜杠关闭该部分来解决,这里是我使用的小技巧,干净简单.
在视图中保留方便的占位符:
@Html.ActionLink("Change your Town", "Manage", "GeoData", new { id = User.Identity.Name }, null)
Run Code Online (Sandbox Code Playgroud)
添加一点jquery/javascript来完成工作:
<script>
$('a:contains("Change your Town")').on("click", function (event) {
event.preventDefault();
window.location.href = '@Url.Action("Manage", "GeoData", new { id = User.Identity.Name })' + "/";
});</script>
Run Code Online (Sandbox Code Playgroud)
请注意尾随斜线,负责更改
http://localhost:51003/GeoData/Manage/user@foo.com
Run Code Online (Sandbox Code Playgroud)
成
http://localhost:51003/GeoData/Manage/user@foo.com/
Run Code Online (Sandbox Code Playgroud)
小智 5
对于那些只在一个网页上有这个的人来说,超级简单的答案。编辑您的操作链接并在其末尾添加一个 +“/”。
@Html.ActionLink("Edit", "Edit", new { id = item.name + "/" }) |
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
93214 次 |
最近记录: |