c# - 在 ASP.NET Core 中向端点发送带有空字符串的 POST 时如何防止 JSON 异常?
问题描述
今天我发现,当我发送带有(空字符串)的POST""
时,它会引发异常。
public IActionResult SendRegistrationLink([FromBody] JObject json) {
...
}
例外:
InvalidCastException: Unable to cast object of type 'Newtonsoft.Json.Linq.JValue' to type 'Newtonsoft.Json.Linq.JObject'.
lambda_method(Closure , object , object[] )
Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(object target, object[] parameters)
Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
我知道,这是因为使用JObject
. 我应该使用非常具体的模型还是只使用Object
然后反序列化它?或者你有更好的解决方案吗?我愿意接受任何建议。
当然还有我的 CURL:
curl -X POST -H 'Content-Type: application/json' -i http://localhost:5001/api/something --data '""'
解决方案
使用 ASP.NET Core 时,始终使用强类型。永远不要使用JObject
这种情况下的类型。为您的需求创建模型。就像是:
public class yourType
{
private int x;
private string xyz; // you know what I mean.
}
希望这可以帮助。
推荐阅读
- php - 如何从树枝向控制器发送和接收请求参数
- c# - 获取乘以 2 的数字中的 int 值列表
- openshift - 在 Fluentd 中将多行日志解析为单个事件
- python-3.x - 不尝试使用任何属性时出现 AttributeError
- ssl - Websphere MQ:如何将 SSL 与托管客户端一起使用
- reactjs - React Native:IOS 中的可访问性LiveRegion 等价物
- android - 创建辅助应用程序管理器,例如(facebook 应用程序管理器)
- webrtc - Chrome 上的 Ant Media publishTimeoutError
- flutter - 颤动屏幕键盘不显示字符
- r - 将 R2jags 对象转换为 Stanreg (rstanarm) 对象