MVC 404 For Simple Route

时间:2014-04-14 15:32:45

标签: c# asp.net-mvc asp.net-mvc-routing

我正在指定自定义路线和动作。我究竟做错了什么?我收到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();
    }
}

2 个答案:

答案 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 }