gpt4 book ai didi

c# - 使用 FromUri 将复杂对象传递给 ASP.NET Web API

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:04 25 4
gpt4 key购买 nike

我想使用属性路由和 [FromUri] 属性将 URL 参数绑定(bind)到我的 Point 对象,以便可以使用以下 URL:

/foo-1,2

public IHttpActionResult PostFoo(
[FromBody] string content,
[FromUri] Point point)
{
}

public class Point
{
public int A { get; set; }
public int B { get; set; }

// ...Other properties omitted for simplicity
}

我已经尝试了以下路由属性,但这些都不起作用:

[Route("foo-{a},{b}")]
[Route("foo-{A},{B}")]
[Route("foo-{point.A},{point.B}")]

请注意,我不能使用查询字符串参数,因为构建不当的第三方服务不接受其 URL 中的 & 符号(是的,这很糟糕)。所以我尝试将所有查询字符串参数构建到 URL 本身。

最佳答案

我知道的两个选项是:

使用URL Rewriter在全局范围内照顾每一条路线。优点是(我希望)您的发布商确实有某种类型的标准 url,您可以将其转换为友好的 MVC 路由。

如果没有,那么您可能必须编写自己的 RouteHandler。不确定您是否可以在全局范围内使用它,但您必须注册很多次(实际上并不难)。

public class CustomRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var acceptValue = requestContext.HttpContext.Request.Headers["Accept"];

if( /* do something with the accept value */)
{
// Set the new route value in the
// requestContext.RouteData.Values dictionary
// e.g. requestContext.RouteData.Values["action"] = "Customer";
}

return base.GetHttpHandler(requestContext);
}
}

然后注册它:

RouteTable.Routes.MapRoute(
name: "Custom",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
).RouteHandler = new CustomRouteHandler();

关于c# - 使用 FromUri 将复杂对象传递给 ASP.NET Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35873245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com