【发布时间】:2021-07-13 14:01:10
【问题描述】:
我有由 HotChocolate 集成的带有 Graphql 的 Asp.Net Core Api。我有输入类型 CreateRoadmapInput 的变异 CreateRoadmap。 My Mutation。 My input type.
我需要正确验证这些输入的字段。我尝试使用 IErrorFilter.My Error Filter 我设法自定义错误消息,但它总是返回 500 状态代码并且没有指定具有无效输入值的字段。例如:客户端可以将 GraphQl 变量的一个字段作为浮点数发送(后面带有点和数字)。在这种情况下,我收到了状态代码为 500 的内部服务器错误和错误消息。 Response with invalid inputResponse Body。俄语翻译:“输入数据无效:字段值无效:请输入整数”
我想要什么:
- 在输入无效的情况下给出 400(Bad Request) 状态码。
- 指定哪些字段的值无效
对不起,我的英语不好。希望你明白这个问题。感谢您的帮助!
我的突变
public ObjectPayload<Roadmap> CreateRoadmap(
CreateRoadmapInput obj,
[Service] IServiceFactory<Roadmap> serviceFactory)
{
try
{
var roadmapService = serviceFactory.CreateServiceInstance(obj.WorkerType);
var roadmap = roadmapService.Create(obj);
return new ObjectPayload<Roadmap>(roadmap);
}
catch (Exception e)
{
return new ObjectPayload<Roadmap>(
new UserError(e.Message, "EXECUTION_ERROR"));
}
}
Mu 输入类型
public class CreateRoadmapInput : InputBase
{
public int WorkerId { get; set; }
public RoadmapType Type { get; set; }
public int Period { get; set; }
public int Year { get; set; }
public int ProcessPercent { get; set; }
public int ProjectPercent { get; set; }
public WorkerType WorkerType { get; set; }
}
我的错误过滤器
public class ErrorHandling : IErrorFilter
{
public IError OnError(IError error)
{
error = error.RemoveExtensions().RemoveLocations().RemoveCode();
if (error.Message.Contains("got an invalid value"))
{
if (error.Exception.Message.Contains("Int cannot parse the given literal of type"))
return error.WithMessage($"Некорректные вводимые данные: Неверное значение поля. Введите целое число");
else
return error.WithMessage($"Некорректные вводимые данные: {error.Exception.Message}");
}
return error.WithMessage(error.Exception.Message);
}
}
【问题讨论】:
-
您好,欢迎来到 SO。感谢您发布您的问题。您可以复制问题中的代码而不是图像吗?根据stackoverflow.com/help/how-to-ask:“请勿发布代码、数据、错误消息等的图像”。感谢您的理解
-
好的,我一拿到电脑就复制代码
标签: c# asp.net-core graphql hotchocolate