猿问

如何从 Azure 函数返回 AcceptedAtRouteResult?

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:索引超出范围。必须为非负数且小于集合的大小。参数名称:索引。


隔江千里
浏览 88回答 1
1回答

喵喔喔

产品团队建议使用以下类来替换 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
随时随地看视频慕课网APP
我要回答