2014-01-29 106 views
1

我使用this從輸入流獲取請求參數。 POST在請求正文中使用JSON。在我的onAuthorize功能,這是覆蓋AuthorizeAttribute。它確實給我請求體參數,但它清空出流,以便控制器未收到任何請求參數:在自定義AuthorizeAttribute中獲取發佈請求參數

public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     filterContext.HttpContext.Request.InputStream.Length() //17 here 
     string jsonPostData; 
     using (var stream = filterContext.HttpContext.Request.InputStream) 
     { 
      stream.Position = 0; 
      using (var reader = new System.IO.StreamReader(stream)) 
      { 
       jsonPostData = reader.ReadToEnd(); 
      } 
     } 
     filterContext.HttpContext.InputStream.Length() //0 here 
     filterContext.HttpContext.Request.InputStream.Position = 0; // still 0 

    base.OnAuthorization(filterContext); //so when the request reaches controller its empty 
} 

我想什麼,我基本上是問的是如何輸入流中讀取它

回答

0

更改代碼,這一點,它開始工作

public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     filterContext.HttpContext.Request.InputStream.Length() //17 here 
     string jsonPostData; 
     var stream = request.InputStream; 
     var reader = new System.IO.StreamReader(stream); 
     jsonPostData = reader.ReadToEnd(); 
     filterContext.HttpContext.InputStream.Length() //17 here 
     filterContext.HttpContext.Request.InputStream.Position = 0; //17 here 

    base.OnAuthorization(filterContext); //so when the request reaches controller its empty 
} 
0

後復位讀取流後,你可以在開始重置自己的立場:

stream.Position = 0; 

你已經沒有這個開始之前讀取數據流,所以儘量看完後重新用同樣的方式。

+0

達林看看我的編輯對我上面貼的代碼,好像它仍然沒有工作 – PUG

+0

如果你沒有在你的授權屬性讀取輸入流,你的控制器中獲得了正確的值? –

+0

是的,我需要閱讀它,因爲它的部分授權多數民衆贊成我如何獲得帳戶ID授權 – PUG

相關問題