我遇到了一个与this StackOverflow问题非常相似的问题。我有下面的.net 6.0隔离功能。当我在postman中调用它时,我可以看到catch语句正在执行,但响应总是200。
[Function("Enquiry")]
public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
{
try
{
var a = new ErrorResponseModel
{
ErrorType = ErrorResponseTypeEnum.ModelValidation
};
a.ErrorMessages.Add("This is a test");
throw new InvalidModelException(a);
}
catch (InvalidModelException inv)
{
var res = req.CreateResponse();
res.StatusCode = HttpStatusCode.BadRequest;
await res.WriteAsJsonAsync(inv.ErrorResponseModel);
return res;
}
}
字符串
的数据
MS文档中没有任何内容建议req.CreateResponse();
应该只有20x
响应。我不想像上面的StackOverflow链接一样使用ActionResult
,因为我在MS文档中找不到任何东西,如果ActionResult
是支持的返回类型。在MS official documentation中。IActionResult
对象似乎仍在预览中。
根据要求更新信息,ErrorResponseModel
[DataContract]
public class ErrorResponseModel
{
[DataMember]
[JsonConverter(typeof(StringEnumConverter))]
public ErrorResponseTypeEnum ErrorType { get; set; }
[DataMember]
public List<string> ErrorMessages { get; set; }
public ErrorResponseModel() => ErrorMessages = new List<string>();
}
public enum ErrorResponseTypeEnum { ModelValidation, MissingParameter, FileLocked }
型InvalidModelException
个
public class InvalidModelException : Exception
{
private readonly ErrorResponseModel _errorResponseModel;
public ErrorResponseModel ErrorResponseModel => _errorResponseModel;
public InvalidModelException(ErrorResponseModel errorResponseModel)
{
_errorResponseModel = errorResponseModel;
}
}
型
1条答案
按热度按时间v9tzhpje1#
当你使用Write时,它会覆盖你设置的状态代码。为了在错误请求响应中提供详细信息,您需要执行以下操作:
字符串
PS:你不能直接序列化InvalidModelException异常。它与NewtonSoft.Json一起工作,但与System.Text.Json一起失败