如何防止模型状态绑定更改 .NET C# 中的 InputRequest
How to prevent model state binding from altering the InputRequest in .NET C#
我有一个 Web API (POST),它接受输入 JSON 并对其进行操作。由于模型状态绑定,请求默认绑定到请求模型。
我们面临这样一种情况,即收到的 JSON 与预期格式不符。就像我们有额外的键值对一样,我们想要识别并通知它。由于模型状态绑定,我无法找到其他参数。
我一直在尝试下面的代码,但我没有得到实际的请求。有没有办法获取实际请求而不是覆盖请求。
public override void OnActionExecuting(HttpActionContext actionContext)
{
string uri = actionContext.Request.RequestUri.ToString();
uri = uri.Substring(uri.LastIndexOf('/') + 1).ToLower();
if(uri.Contains("xxx"))
{
PartnerLoginSchema reqSchema = new PartnerLoginSchema();
JsonSchema schema = JsonSchema.Parse(reqSchema.schemaJson);
var requestInput = actionContext.ActionArguments["requestx"];// receiving overriden request
string valid = JsonConvert.SerializeObject(requestInput);
JObject jsonObj= JObject.Parse(valid);
bool testcheck = person.IsValid(schema);
}
}
例如:预期 JSON
{
req1: "asd",
req2: "wer"
}
输入JSON收到:
{
req1:"asdf",
req2:"werr",
req3:"unwanted" // this attribute is not required and has to be identified
}
我想通过某种方式在 JSON 中找到 req3。
有没有办法在 ASP.NET C# 中实现它?
我可以通过读取来自 HttpContext.Current.Request.InputStream
的输入 JSON 来实现它
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MissingMemberHandling = MissingMemberHandling.Error;
string req_txt;
using (StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream))
{
req_txt = reader.ReadToEnd();
}
try
{
ExpectedJsonFormat s =
JsonConvert.DeserializeObject<ExpectedJsonFormat>(req_txt,
settings); // throws expection when over-posting occurs
}
catch (Exception ex)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, BadAndUnAuthorisedRequest("extra column"));
}
我有一个 Web API (POST),它接受输入 JSON 并对其进行操作。由于模型状态绑定,请求默认绑定到请求模型。
我们面临这样一种情况,即收到的 JSON 与预期格式不符。就像我们有额外的键值对一样,我们想要识别并通知它。由于模型状态绑定,我无法找到其他参数。
我一直在尝试下面的代码,但我没有得到实际的请求。有没有办法获取实际请求而不是覆盖请求。
public override void OnActionExecuting(HttpActionContext actionContext)
{
string uri = actionContext.Request.RequestUri.ToString();
uri = uri.Substring(uri.LastIndexOf('/') + 1).ToLower();
if(uri.Contains("xxx"))
{
PartnerLoginSchema reqSchema = new PartnerLoginSchema();
JsonSchema schema = JsonSchema.Parse(reqSchema.schemaJson);
var requestInput = actionContext.ActionArguments["requestx"];// receiving overriden request
string valid = JsonConvert.SerializeObject(requestInput);
JObject jsonObj= JObject.Parse(valid);
bool testcheck = person.IsValid(schema);
}
}
例如:预期 JSON
{
req1: "asd",
req2: "wer"
}
输入JSON收到:
{
req1:"asdf",
req2:"werr",
req3:"unwanted" // this attribute is not required and has to be identified
}
我想通过某种方式在 JSON 中找到 req3。
有没有办法在 ASP.NET C# 中实现它?
我可以通过读取来自 HttpContext.Current.Request.InputStream
的输入 JSON 来实现它JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MissingMemberHandling = MissingMemberHandling.Error;
string req_txt;
using (StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream))
{
req_txt = reader.ReadToEnd();
}
try
{
ExpectedJsonFormat s =
JsonConvert.DeserializeObject<ExpectedJsonFormat>(req_txt,
settings); // throws expection when over-posting occurs
}
catch (Exception ex)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, BadAndUnAuthorisedRequest("extra column"));
}