我正在尝试查看通过IModelBinder接口在POST中发送的文本。我有类似的东西:

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


...哪里???应该是在POST中发送的文本。 (我认为)应该是一块文本,但是我看不到如何访问它。有人可以启发我吗?

最佳答案

好的,按照@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;
    }
}


这完全按照需要工作。

关于c# - IModelBinder:访问请求的原始数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30214109/

10-10 16:58