从Azure函数返回AcceptedAtRouteResult
时,我一直在处理主机错误。
我希望能够从Azure函数返回AcceptedAtRouteResult
,以告知调用方任何省略的查询字符串参数的默认值,但我一直遇到未处理的主机错误。
我的目标是.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:索引 超出范围。必须为非负数,并且小于 采集。参数名称:索引。
答案 0 :(得分: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