Как вернуть AcceptedAtRouteResult из функции Azure? - PullRequest
3 голосов
/ 01 апреля 2019

Я продолжаю получать необработанные ошибки хоста при возврате AcceptedAtRouteResult из функции Azure.

Я хочу иметь возможность вернуть AcceptedAtRouteResult из функции Azure, чтобы сообщить вызывающему абоненту значения по умолчанию любогопропущены параметры строки запроса, но я продолжаю получать необработанные ошибки хоста.

Я нацеливаюсь на .net Standard 2.0.3 и использую Microsoft.NET.Sdk.Functions 1.0.26

[FunctionName("AcceptedAtRouteResult")]
public static IActionResult AcceptedAtRouteResult(
    [HttpTrigger("GET")]HttpRequest req)
{
    // read query parameter if present else set to defualt value

   var rs = new AcceptedAtRouteResult(
        "acceptedatrouteresult", 
        new { someParameter = "value" }, 
        new { Result = "1" });

    return rs;
}

Я продолжаю получать исключение:

Произошла необработанная ошибка хоста.System.Private.CoreLib: индекс был вне диапазона.Должен быть неотрицательным и меньшим, чем размер коллекции.Имя параметра: индекс.

1 Ответ

0 голосов
/ 25 апреля 2019

Команда продукта рекомендовала использовать следующий класс для замены типа возвращаемого значения AcceptedAtRouteResult, пока ошибка не будет исправлена:

class AcceptedObjectResult : ObjectResult
{
    private readonly string _location;

    public AcceptedObjectResult(string location, object value) : base(value)
    {
        _location = location;
    }

    public override Task ExecuteResultAsync(ActionContext context)
    {
        context.HttpContext.Response.StatusCode = 202;
        var uri = new UriBuilder(context.HttpContext.Request.Scheme, context.HttpContext.Request.Host.Host)
        {
            Path = $@"api/{_location}",
        };
        if (context.HttpContext.Request.Host.Port.HasValue)
        {
            uri.Port = context.HttpContext.Request.Host.Port.Value;
        }

        context.HttpContext.Response.Headers.Add(@"Location", uri.ToString());

        return base.ExecuteResultAsync(context);
    }
}

Билет с ошибкой можно отследить на Github: https://github.com/Azure/azure-functions-host/issues/4267

...