C# 在ASP.NET MVC3中,如何查看请求?

C# 在ASP.NET MVC3中,如何查看请求?,c#,asp.net-mvc,asp.net-mvc-3,httpwebrequest,C#,Asp.net Mvc,Asp.net Mvc 3,Httpwebrequest,我用了一条简单的路线 routes.MapRoute( "Default2", // Route name "{cliurl}/{id}", // URL with parameters new { cliurl = "none", controller = "ABook", action = "Index", id = "none" } // Parameter defaults ); routes.MapRoute( "Default", // Route

我用了一条简单的路线

routes.MapRoute(
    "Default2", // Route name
    "{cliurl}/{id}", // URL with parameters
    new { cliurl = "none", controller = "ABook", action = "Index", id = "none" } // Parameter defaults
);

routes.MapRoute(
    "Default", // Route name
    "{cliurl}/{controller}/{action}/{id}", // URL with parameters
    new { cliurl = "none", controller = "ABook", action = "Index", id = "none" } // Parameter defaults
);
当我调试网站(VS2010 SP1)时,我在
ABook
控制器中有一个断点,在
索引
操作方法中,它只包含:

//
// GET: /ABook/
public ActionResult Index()
{
    if (currentClient == null)
        return RedirectToAction("Empty");

    return View();
}

//
// GET: /Empty/
public ActionResult Empty()
{
    return View();
}
问题是,当我在浏览器中插入此选项时:

http://localhost:14951/client_name/hashed_id
我在那个断点上得到了3次破发

我怎么才能知道到底发生了什么?为什么我只请求了3次1,浏览器到底请求了什么

我只能获得路由参数,并且我确实获得了正确的第一个参数,但是第二个和第三个参数使用默认值,我尝试在
RequestContext
中导航,但我看不到任何有用的内容:(

我只是想知道是否有一种方法可以真正看到所请求的内容


您可以使用查看浏览器请求的内容,也可以尝试从Nuget下载
routdebugger

如果控制器中有断点,您可以使用watch创建新手表。键入
Request
并搜索它…

在每个控制器中都存在一个名为Request的属性。它实际上是在System.Web.Mvc.Controller中定义的,System.Web.Mvc.Controller是所有控制器的超类。该属性将acutal请求对象作为HttpRequestBase返回,并公开InputStream、Header、HttpMethod等字段


至于为什么要三次使用索引方法,我相信浏览器发出的其他请求,例如图像、javascript和其他现有文件,也会由您定义的路由处理。简言之,您的路由防御过于通用,会处理意外请求。您可以使用route.IgnoreRoute来纠正这一点(“Path/to/Existing/Files”)或通过添加RouteConstraint使您的路线更加具体。如果您想知道如何做到这一点,请留下评论。

我知道其他人已经尝试过这一点……他们是正确的:


使用
Request
对象找出所请求的内容。这可能是控制器处理不正确的问题。在使用该方法调试
Request
时,清除一些输出,例如原始url。这可能会回答问题。

作为建议,为什么不连接
BeginRequest
>应用程序的事件处理程序,它将允许您查看通过的每个请求。还有可以检查的
HttpContext.Current.request.Url
对象

    // Global.asax
    public MvcApplication()
    {
        BeginRequest += new EventHandler(MvcApplication_BeginRequest);
    }

    void MvcApplication_BeginRequest(object sender, EventArgs e)
    {
         Debug.WriteLine("[Start] Requested Url: " + HttpContext.Current.Request.RawUrl);
    }
我最终使用了


:o)我知道其中一个,我想知道代码内部,流程,MVCI内部的请求,知道如何使用Visual Studio工具,这不是我的问题,我只是想知道在哪里可以看到它,什么对象,因为
RequestContext
对象不包含任何内容。需要的是
Request
object中的内容对不起,ignorance,但是你怎么下载它呢?我在这里找到了-没有链接..在
Visual Studio
中安装
NuGet
(如果你有MVC3模板)您已经有了它。右键单击项目中的References文件夹,然后选择Add Library Package Reference,单击
Online
->
NuGet official Package source
,然后搜索
Skip
…install!-您可以从Tools->Library Package Manager->Add Library Package Reference…(工具->库包管理器->添加库包参考)中获得对话框,或者打开e控制台并使用
安装软件包Gliep
进行安装-请阅读此处的更多信息。您也可以立即转到codeplex并直接下载-