2012-05-01 50 views
2

如果這是一個表單的常規職位,我可以去Request.Form ['somevalue']並獲得價值。如果這是一個帶查詢字符串的get,我可以去Request.QueryString [「somevalue」]並獲取值。AJAC MVC3請求對象和原始的Ajax數據,在哪裏?

發佈ajax請求時的原始數據在哪裏?我需要一個過濾方法中的原始數據字符串中的值。

任何幫助將不勝感激!下面

編輯:

public class ValidateAntiForgeryId : FilterAttribute, IAuthorizationFilter { 
    public void OnAuthorization(AuthorizationContext filterContext) { 
     if (filterContext == null) { 
      throw new ArgumentNullException("filterContext"); 
     } 

     Guid filterGuid; 
     Guid.TryParse(filterContext.RequestContext.HttpContext.Request.Form["__sessionId"], out filterGuid); 

     if (filterGuid == Guid.Empty) 
      throw new AuthenticationException("Authentication failure"); 
     try { 
      var cookieGuid = (Guid)filterContext.RequestContext.HttpContext.Items["SessionId"]; 
     } catch { 
      throw new AuthenticationException("Authentication failure"); 
     } 
    } 

張貼的數據是這樣的:

{"SsnLastFour":"2222","AccountNumber":"B112233","__sessionId":"dca0a504-3c40-4118-ae19-afefb9bfc8bd"} 

我需要訪問過濾器內部的__sessionId塊。

+0

顯示你的代碼,它發送Ajax請求 – Shyju

+0

我試過的Request.Form [「someValue中」]在隨機AJAX張貼輸入我的項目,它正確地獲取它。我很好奇你正在嘗試做什麼。 – DMulligan

+0

我可以看到你的Ajax文章的代碼嗎?你是否將JSON發送給控制器? – Paul

回答

4

AJAX帖子沒有任何魔力。他們只是普通的舊HTTP。這意味着你有簡單的舊的HTTP post值和/或plainold HTTP Get值。

如果你沒有看到它們,這可能意味着你實際上沒有提交它們。

編輯:1)這是JSON和2)這是一個AuthorizationFilter(而不是一個操作方法):你沒在你原來的問題包括

兩個問題。

兩者都改變​​了答案。由於ASP.NET本身並不理解JSON發佈值,所以您必須通過Request.InputStream解析它們。默認情況下,MVC3有一個JSON模型聯編程序,但AuthorizationFilters在模型聯編程序執行之前執行,因此您將在執行模型聯編程序之前訪問事物,並且因此FormsCollection不會被填充(Request.Form []將不起作用或者,因爲正如我所說的,asp.net本身並不理解JSON)。

您可能會發現通過nuget安裝JSON.net可能有助於完成此任務。或者你可能只是寫一個簡單的解析程序,因爲你確切地知道你在找什麼。

+0

我沒有提到這是json/post。對不起,你是正確的,這是遲到了,我昨天一直在這個有點久了! – Mike

+0

謝謝!答案是Request.InputStream!最糟糕的部分是我有自定義的modelbinder,實際上這已經與Json.net一起使用。昨晚我真的很累!再次感謝你!! – Mike

+0

如果可以的話,我會給你一個+5 – bmavity

0

您可以接受參數值,這與您在普通表單發佈中接受的方式相同。

例:

$.get("User/Get", { userId : "24"} ,function(data){ 
    alert(data); 
}); 

$("#yourDivId").load("User/Get?userId=23"); 

您的操作方法應該看起來像你必須記住

public ActionResult Get(int userId) 
{ 
// you have value present in userId 
    if(Request.IsAjax()) 
    { 
    return View("Partial/MyPartialView"); 
    } 
    return View(); 
} 

的一件事是,你的動作方法的參數名稱應與你的參數/查詢字符串名稱相同。

+0

這是JSON文章的問題。我最初的帖子應該更清楚了。 – Mike

+0

@Mike - Shyju的答案適用於json,這不是問題。問題是你需要訪問授權過濾器中的json。 –

0

fitlerContext有一個ActionParameters集合,它應該具有解析的JSON屬性(如果有幫助的話)。這可能比解析InputStream更容易。

var sessionId = filterContext.ActionParameters["__sessionId"];