繁体   English   中英

在ASP.NET MVC3中,我如何看到请求?

[英]in ASP.NET MVC3 how can I see the request?

我正在使用一条简单的路线

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 Controller中有一个断点,其中Index动作方法witch仅包含:

//
// 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次

我怎么看世界上发生了什么? 为什么我刚请求1次时3次,浏览器到底请求了什么?

我只能得到Route Parameters,但确实得到第一个正确的参数,但是2nd和3rd使用的是默认值,我试图浏览RequestContext ,但看不到任何有用的方法:(

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

如果控制器内部有断点,则可以使用watch,您可以在其中简单地创建新的watch。 输入Request并搜索...

每个Controller中都有一个称为Request的属性。 它实际上是在System.Web.Mvc.Controller中定义的,它是所有控制器的超类。 该属性将原始的Request对象作为HttpRequestBase返回,并公开诸如InputStream,Headers,HttpMethod之类的字段,依此类推。

至于为什么您要3次点击index方法,我确定浏览器发出的其他请求(例如,图像,javascript和其他现有文件)也将由您定义的路由处理。 简而言之,您的路线定义过于笼统,无法处理意外请求。 您可以通过使用Route.IgnoreRoute(“ Path / to / Existing / Files”)或通过添加RouteConstraints使路线更具体来纠正此问题。 如果您想知道如何发表评论。

您可以使用提琴手查看浏览器的要求,也可以尝试从routdebugger下载routdebugger。

我知道其他人对此有所刺...他们是正确的:

使用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);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM