簡體   English   中英

使用 FromUri 將復雜對象傳遞給 ASP.NET Web API

[英]Passing Complex Objects to ASP.NET Web API Using FromUri

我想使用屬性路由和[FromUri]屬性將 URL 參數綁定到我的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 屬性,但這些都不起作用:

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

請注意,我不能使用查詢字符串參數,因為構建不良的第三方服務不接受其 URL 中的&符號(是的,就是這么糟糕)。 所以我試圖將所有查詢字符串參數構建到 URL 本身中。

我知道的兩個選項是:

使用URL 重寫器全局處理所有路由。 優點是(我希望)您的發布者確實有某種類型的標准 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM