如何从Azure函数返回AcceptedAtRouteResult?

问题描述 投票:3回答:1

从Azure函数返回AcceptedAtRouteResult时,我继续遇到unhandles主机错误。

我希望能够从Azure函数返回AcceptedAtRouteResult,以告诉调用者任何省略的查询字符串参数的默认值,但我一直收到未处理的主机错误。

我的目标是.net标准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:索引超出范围。必须是非负数且小于集合的大小。参数名称:index。

c# .net azure azure-functions .net-standard
1个回答
0
投票

产品团队建议使用以下类替换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

© www.soinside.com 2019 - 2024. All rights reserved.