我在調試一個MVC應用程序時遇到了麻煩,我期望依賴的部分POST。使用ASP.NET MVC,有沒有辦法捕獲所有POST請求,而不管URL到主機?
是否有一種簡單的方法來配置MVC 4應用程序來攔截所有POST請求,以便我可以看到它試圖發送到的URL以及響應是什麼?
我在調試一個MVC應用程序時遇到了麻煩,我期望依賴的部分POST。使用ASP.NET MVC,有沒有辦法捕獲所有POST請求,而不管URL到主機?
是否有一種簡單的方法來配置MVC 4應用程序來攔截所有POST請求,以便我可以看到它試圖發送到的URL以及響應是什麼?
通常情況下,一個全局過濾器將是你想要的。但是,由於在路線確定之後纔會觸發,因此在這種情況下可能無法幫助您。
你可以嘗試的一件事是在global.asax中添加一個Application_BeginRequest
方法。它甚至不需要做什麼。只需在其中設置斷點,然後檢查Request.AppRelativeCurrentExecutionFilePath
(或請求的其他成員)以查看入站路徑。
protected void Application_BeginRequest()
{
if (Request.HttpMethod.Equals("post", StringComparison.InvariantCultureIgnoreCase))
{ // Breakpoint here
}
}
A 「global filter」 是用於注入行爲等進入管道的優選方法。 MVC已經實現了其中的一些,你也可以擴展或實現你自己的。
我去年實施的一個具體示例:客戶端網站具有過期密碼的功能。大;工作正常,當用戶在被告知時立即改變它。但他們發現他們只能導航到網站的另一部分,直到下次他們登錄後纔再次提示。所以我們添加了一個全局過濾器來檢查密碼是否過期(以及我們是否已經檢查過在此會話中),如果是,則重定向到「更改密碼」屏幕。改變之後,他們可以回到以前的任何地方。
但是,爲了找出路由或綁定問題,這裏有一個缺點:路由引擎已經在您的全局過濾器獲得它之前評估了請求。如果它無法識別目標動作,則您的過濾器將不會被擊中。所以在這種情況下,像Application_BeginRequest
這樣的低級功能是您唯一現實的選擇。
這就是我正在尋找的,歡呼! – Firoso 2013-03-01 19:04:22
關注擴展全局過濾器,以及爲什麼它不適用作爲後半部分? – Firoso 2013-03-01 19:04:56
@Firoso在全局過濾器上添加了一些細節。 – GalacticCowboy 2013-03-01 19:22:22