2015-05-13 128 views
1

我想通過IModelBinder界面查看POST中發送的文本。我有類似的東西:IModelBinder:訪問請求的原始數據

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     if (controllerContext.HttpContext.Request.ContentType.ToLowerInvariant().StartsWith("my special content type")) 
     { 
      var data = ??? 

...哪裏???應該是POST中發送的文本。它應該是一個文本塊(我認爲),但我不知道如何訪問它。有人能夠啓發我嗎?

+0

你可以使用'ModelBindingContext',例如如果你想要一個名爲'LastName'的表單控件的值,那麼'var lastName = GetValue(bindingContext,「LastName」),' –

+0

我不想要「LastName」儘管...我想要整個辣醬玉米餅餡。我怎樣才能看到發回的全部文本? –

+0

也許你可以使用這個SO問題的方法http://stackoverflow.com/questions/15241710/accessing-the-raw-http-request-in-mvc4讀取原始的http請求? –

回答

1

OK,每@ ScottRickman的建議,我看了看文章在Accessing the raw http request in MVC4,看到如何將其應用到IModelBinder:

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
{ 
    if (controllerContext.HttpContext.Request.ContentType.ToLowerInvariant().StartsWith("my special content type")) 
    { 
     var body = GetBody(controllerContext.HttpContext.Request); 
     var model = MyCustomConverter.Deserialize(body, bindingContext.ModelType); 
     return model; 
    } 
} 

private static string GetBody(HttpRequestBase request) 
{ 
    var inputStream = request.InputStream; 
    inputStream.Position = 0; 

    using (var reader = new StreamReader(inputStream)) 
    { 
     var body = reader.ReadToEnd(); 
     return body; 
    } 
} 

根據需要這正是工作。