我正在指定自定义路线和动作。我究竟做错了什么?我收到404错误。我将其设置为与此示例类似: http://www.codeproject.com/Articles/190267/Controllers-and-Routers-in-ASP-NET-MVC
网址:
http://localhost:14133/ScanSummary/mywebsite.com
路线:
routes.MapRoute(
"ScanSummary",
"ScanSummary/{domain}",
new { controller = "ScanSummary", action = "Get" }
);
控制器:
public class ScanSummaryController : Controller
{
public ActionResult Get(string domain)
{
return View();
}
}
答案 0 :(得分:2)
由于.com
扩展名,IIS认为这是磁盘上的文件并尝试直接提供而不是通过管道。
解决此问题的一种方法是为所有请求运行托管模块:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
...
</system.webServer>
另一个(和IMHO更好的方法)是将MVC处理程序显式映射到此端点:
<system.webServer>
<modules runAllManagedModulesForAllRequests="false" />
<handlers>
...
<add
name="SvanSummaryHandler"
path="ScanSummary/*"
verb="GET,HEAD,POST"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
另外,如果您打算在网址的路径部分传递任意字符,我建议您阅读以下博文,以便更好地了解等待您的问题:http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx
简单地按照Scott Hanselmann的建议:
在完成所有这些努力以在请求路径中获取疯狂的东西之后,它就是这样 值得一提的是,只需将值保留为Query的一部分 字符串(记得在这篇文章的开头回答?)更容易, 更清洁,更灵活,更安全。
哦,为了让事情变得更有趣,你可以看一下这篇博文:http://bitquabit.com/post/zombie-operating-systems-and-aspnet-mvc/
读完之后你开始使用查询字符串吗?我希望你做到了。
答案 1 :(得分:0)
你需要替换
new { controller = "ScanSummary", action = "Get" }
与
new { controller = "ScanSummary", action = "Get", domain = UrlParameter.Optional }