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