Asp.net mvc Web API请求。内容截断前3个字符

Asp.net mvc Web API请求。内容截断前3个字符,asp.net-mvc,rest,asp.net-web-api,Asp.net Mvc,Rest,Asp.net Web Api,我们在Web API的Post操作中得到了空的模型对象(甚至客户端也在发送有效的json) Ex:{prop1:"value1",prop2:"val2" } 当我们尝试使用Request.content.ReadAsStringAsync().Result记录内容时在自定义属性[System.Web.Http.AuthorizeAttribute]中,我们收到了有效的json Ex:{prop1:"value1",prop2:"val2" } 但在下面的操作中,我们得到了无效的请求。当我们

我们在Web API的Post操作中得到了空的模型对象(甚至客户端也在发送有效的json)

Ex:{prop1:"value1",prop2:"val2" }
当我们尝试使用
Request.content.ReadAsStringAsync().Result记录内容时
在自定义属性
[System.Web.Http.AuthorizeAttribute]
中,我们收到了有效的json

Ex:{prop1:"value1",prop2:"val2" }
但在下面的操作中,我们得到了无效的请求。当我们尝试记录内容时

Ex:{prop1:"value1",prop2:"val2" }
[HttpPost]
[Route("submitRequest")]
public IHttpActionResult SubmitRequest([FromBody]Test request)
{
   string str = Request.Content.ReadAsStringAsync().Result; 
  // We got prop1:"value1",prop2:"val2" }   output 
}
此处缺少“{”(在Json中)内容,因此模型绑定失败

Ex:{prop1:"value1",prop2:"val2" }
有人能帮我们解释一下为什么我们得到了无效的Json

Ex:{prop1:"value1",prop2:"val2" }
config.Formatters.Add(new JsonMediaTypeFormatter());         
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

[DataContract]
public class Test
{
    [DataMember]
    public string Prop1 { get; set; }
    [DataMember]
    public string Prop2 { get; set; }
    [DataMember]
    public string Prop3 { get; set; }
}

任何人都可以帮助我们,为什么我们在操作中得到无效的json

模型绑定已经读取了内容流,所以您应该在再次尝试读取之前查找流的开头:
var stream=Request.content.ReadAsStreamAsync().Result;stream.seek(0,SeekOrigin.Begin);使用(StreamReader=newstreamreader(stream))string str=reader.ReadToEnd();
在您的示例中,json也是无效的,它应该是:
{“prop1”:“value1”,“prop2”:“val2”}
示例中有输入错误,看起来模型绑定无法反序列化json。请求中的所有属性都是null(request.Prop1=null……)。如果您查找流的开头,是否需要在此实现自定义绑定内容的开头是否仍缺少字符?如果没有,请尝试反序列化:
Newtonsoft.Json.JsonConvert.DeserializeObject(str);
我认为您的json中可能有错误,这就是模型绑定器无法反序列化它的原因。我可以反序列化对象,但我希望模型绑定器能够反序列化请求的json。我正在获取请求。Prop1=null…[IHttpActionResult SubmitRequest([FromBody]测试请求)]检查Request.Content.Headers.ContentType.MediaType是否为“application/json”,如果没有,模型绑定器可能不会使用正确的反序列化器
Ex:{prop1:"value1",prop2:"val2" }