首页 > 解决方案 > AllowHttpStatus 仍然抛出 Flurl.Http.FlurlHttpException

问题描述

我正在使用AllowHttpStatus禁用 HTTP 错误引发的异常并自己处理异常。不幸的是,我仍然得到一个例外。

Flurl.Http.FlurlHttpException。调用失败,状态码为 500(内部服务器错误):POST http://MyUrl 请求

编码

var request = new Url("http://MyUrl").AllowHttpStatus();

var content = new FileContent(Conversion.SourceFile.FileInfo.ToString());

var task = request.PostAsync(content, model.CancellationToken);
using (var httpStream = await task.ReceiveStream())
using (var fileStream = new FileStream(DestinationLocation + @"\result." + model.DestinationFileFormat, FileMode.CreateNew))
{
    await httpStream.CopyToAsync(fileStream);
}

//This line is never reached if HTTP Exception is thrown by PostAsync   
if (task.Result.StatusCode != HttpStatusCode.OK)
{
    if (task.Result.StatusCode != HttpStatusCode.InternalServerError)
    {
        Logger.Main.LogCritical($"Exception {task.Result.ReasonPhrase}");
    }

    throw new ApiException(ResponseMessageType.ConversionFailed);
}

为什么AllowHttpStatus没有按预期工作?

标签: c#flurl

解决方案


AllowHttpStatus接受参数。没有它们,它没有任何效果。因此,在这种情况下,您需要传递它HttpStatusCode.InternalServerError,例如:

var request = new Url("http://MyUrl").AllowHttpStatus(HttpStatusCode.InternalServerError);

或者使用AllowAnyHttpStatus

var request = new Url("http://MyUrl").AllowAnyHttpStatus();

推荐阅读