我有一个与this StackOverflow 问题非常相似的问题。我有以下 .net 6.0 隔离功能。当我在邮递员中调用它时,我可以看到 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官方文档中。看起来 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;
}
}