C# 如何从Azure函数返回AcceptedAtRouteResult?

C# 如何从Azure函数返回AcceptedAtRouteResult?,c#,.net,azure,azure-functions,.net-standard,C#,.net,Azure,Azure Functions,.net Standard,从Azure函数返回AcceptedAtRouteResult时,我不断收到未处理的主机错误 我希望能够从Azure函数返回一个AcceptedAtRouteResult,告诉调用者任何省略的查询字符串参数的默认值,但我不断收到未处理的主机错误 我的目标是.net标准2.0.3,并使用Microsoft.net.Sdk.Functions 1.0.26 [FunctionName(“AcceptedAtRouteResult”)] 公共静态IActionResult接受TrouterResult

从Azure函数返回
AcceptedAtRouteResult
时,我不断收到未处理的主机错误

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

我的目标是.net标准2.0.3,并使用
Microsoft.net.Sdk.Functions 1.0.26

[FunctionName(“AcceptedAtRouteResult”)]
公共静态IActionResult接受TrouterResult(
[HttpTrigger(“GET”)]HttpRequest请求)
{
//如果存在,则读取查询参数,否则设置为解除值
var rs=新接受的旅行结果(
“AcceptedTrouteresult”,
新的{someParameter=“value”},
新的{Result=“1”});
返回rs;
}
我不断得到一个例外:

发生了未处理的主机错误。System.Private.CoreLib:索引 在射程之外。必须为非负数且小于 收集参数名称:索引


产品团队建议使用以下类替换AcceptedTrouterResult返回类型,直到错误得到纠正:

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上跟踪:

我复制了这个问题,我相信这是运行时中的错误。您可以在此处跟踪错误报告的状态:我与CreateDatRouterResult有相同的问题,如果您得到的错误与可能的错误相同,那么您可以向Github线程添加注释,让产品团队知道有多种类型受到影响。如果是同一个bug,那么同样的解决方法也应该同时起作用。我提交了一份PR来解决这个问题,但值得注意的是,如果您使用的是
AcceptedAtRoute
CreatedAtRoute
,则必须定义一个函数,该函数映射到
位置
标题中返回的路由。这与ASP.Net的功能是一致的。如果您想将消费者指向功能应用程序边界之外的位置,则必须使用
AcceptedResult
CreatedResult
,而不是它们的“路线”或“动作”对应项。