C# 处理请求后asp.net核心rest API中的可选正文
我有一个API入口点,必须处理2种情况:C# 处理请求后asp.net核心rest API中的可选正文,c#,asp.net-core,C#,Asp.net Core,我有一个API入口点,必须处理2种情况: 在第一种情况下,我并没有在body中接收对象,然后我必须返回一个200响应 在第二种情况下,我接收到一个对象,我必须通过持久化数据来处理它。例如,在这种情况下,我还返回一个200响应 我试图找到如何处理这个案子。我实现了一个EmptyBodyModelBinder类: public class EmptyBodyModelBinder<T> : IModelBinder { public async Task BindModelA
- 在第一种情况下,我并没有在body中接收对象,然后我必须返回一个200响应
- 在第二种情况下,我接收到一个对象,我必须通过持久化数据来处理它。例如,在这种情况下,我还返回一个200响应
public class EmptyBodyModelBinder<T> : IModelBinder
{
public async Task BindModelAsync(ModelBindingContext bindingContext)
{
var stream = bindingContext.HttpContext.Request.Body;
using var reader = new StreamReader(stream);
var jsonbody = await reader.ReadToEndAsync();
var obj = JsonConvert.DeserializeObject<T>(jsonbody);
bindingContext.Result = ModelBindingResult.Success(obj);
}
}
public类EmptyBodyModelBinder:IModelBinder
{
公共异步任务BindModelAsync(ModelBindingContext bindingContext)
{
var stream=bindingContext.HttpContext.Request.Body;
使用var reader=newstreamreader(流);
var jsonbody=await reader.ReadToEndAsync();
var obj=JsonConvert.DeserializeObject(jsonbody);
bindingContext.Result=ModelBindingResult.Success(obj);
}
}
我的问题是在我的控制器方法中实现这一点:
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public ActionResult<EmailPredictionResponse> HandleResponse(
[FromBody, ModelBinder(BinderType = typeof(EmptyBodyModelBinder<MyObjectResponse>))] MyObjectResponse responses)
{
var itemList = response.Items.GetEnumerator();
if (itemList.Current.Key != null)
{
try
{
while (itemList.MoveNext())
{
_logger.LogError("Key: {itemList.Current.Key} - Value: {itemList.Current.Value}", itemList.Current.Key, itemList.Current.Value);
}
}
finally
{
itemList.Dispose();
}
}
else
{
return Ok();
}
return responses;
}
[HttpPost]
[产品响应类型(StatusCodes.Status201Created)]
[产品响应类型(StatusCodes.Status400BadRequest)]
公共行动结果处理者响应(
[FromBody,ModelBinder(BinderType=typeof(EmptyBodyModelBinder))]MyObject响应
{
var itemList=response.Items.GetEnumerator();
if(itemList.Current.Key!=null)
{
尝试
{
while(itemList.MoveNext())
{
_LogError(“Key:{itemList.Current.Key}-Value:{itemList.Current.Value}”,itemList.Current.Key,itemList.Current.Value);
}
}
最后
{
Dispose();
}
}
其他的
{
返回Ok();
}
回应;
}
毫无疑问,我获得了以下错误消息:System.NullReferenceException:Object reference未设置为对象的实例。
事实上,在这两种情况下,我都必须返回一个Ok响应。。。我的问题是我不知道如何使json主体成为可选的。为什么不使MyObjectResponse为空?