2017-05-22 58 views
0

我正在開發asp.net核心Web應用程序。當我嘗試訪問自定義過濾器後的數據,這樣的:嘗試訪問自定義過濾器中的發佈數據時遇到InvalidOperationException

public class CustomFilter : Attribute, IAsyncActionFilter 
    { 

     private ActionExecutingContext _context; 

     public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) 
     { 
      _context = context; 

      var dict = _context.HttpContext.Request.Form.ToDictionary(x => x.Key, x => x.Value.ToString()); // got error her 

      //int id = dict[「id」]; 
... 

我得到這個例外

出現InvalidOperationException:不正確的內容類型:應用程序/ JSON。

我用XMLHttpRequest來發送數據到服務器。下面是配置:

var xhr = new XMLHttpRequest(); 

xhr.open(「post」, url, true); 

xhr.setRequestHeader('Content-Type', 'application/jso 

xhr.send(JSON.stringify(dataToSent)); 

回答

0

如果您發佈application/json體(具有內有效的JSON)不要去碰它當作表格數據(通常是application/x-www-form-urlencoded)。讀取原始數據並將其反序列化:

public class CustomFilter : Attribute, IAsyncActionFilter 
{ 
    public async Task OnActionExecutionAsync(ActionExecutingContext context, 
     ActionExecutionDelegate next) 
    { 
     var stream = context.HttpContext.Request.Body; 

     string json = new StreamReader(stream).ReadToEnd(); 

     //Foo obj = JsonConvert.DeserializeObject<Foo>(); 
    } 
} 
+0

感謝您的幫助。我試過這段代碼,但StreamReader(stream).ReadToEnd,返回空字符串。 – Angy

+0

@Angy,通常意味着主體是空的或需要的標題丟失=)您可以檢查您的POST請求嗎?應該設置「Content-Type」和「Content-Length」標題。你可以使用https://requestb.in來確保。 –

+0

我在context.HttpContext.Request和content-type是「application/json」,內容長度:135 – Angy

相關問題