【问题标题】:RESTful POST with nested URL on webApi在 webApi 上带有嵌套 URL 的 RESTful POST
【发布时间】:2012-07-14 08:50:02
【问题描述】:

我在尝试执行 POST 以使用我自己的基于 .Net WebApi 的 REST 服务在嵌套 URL 上创建新的 REST 资源时遇到以下问题。

请想象以下网址 api/parents/{parentId}/children,我想在其上执行 POST 以添加另一个孩子。

这与Using asp webapi to post a nested resource 中描述的问题非常相似。但是在 global.asax 中,我没有成功用 routes.MapHttpRoute(...) 定义一个路由,该路由调用我的父母控制器的方法,其中包含 {parentId}以及要添加/发布的子对象,例如调用:

[HttpPost]
public HttpResponseMessage AddChildToParent(int parentId, Child newChild) {
    //implementation
}

(这也是与上述问题答案的区别,因为它没有提供任何可以添加的对象。)

我在网上搜索,但不幸的是我找不到解决方案 - 可能也是因为我什至找不到关于用作参数的 defaults 对象语义的官方文档MapHttpRoute() 方法。

谁能为我的问题建议一个有效的路由定义,或者至少发布一个链接到 MapHttpRoute() 中使用的 defaults 对象的有用文档?非常感谢!

【问题讨论】:

  • this 帖子中的答案可能有助于解决您的问题。

标签: rest post asp.net-mvc-4


【解决方案1】:

尝试将以下 Web API 路由添加到您的注册函数中。 (注册函数默认传入Application_Start上的WebApiApplication,继承自System.Web.HttpApplication,传递给函数GlobalConfiguration.Configure(...),默认定义在静态类WebApiConfig中。)

添加

config.Routes.MapHttpRoute(
    name: "PostChild",
    routeTemplate: "api/{controller}/{parentId}/children",
    defaults: new { action = "AddChildToParent" },
    constraints: new
    {
        httpMethod = new HttpMethodConstraint(HttpMethod.Post),
        controller = "Parents"
    }
);

到注册函数,其中configHttpConfiguration对象参数。

然后通过 URL api/parents/{parentId}/children 将调用ParentsController 中的以下方法:

public class ParentsController : ApiController
{
    [HttpPost]
    public HttpResponseMessage Post([FromUri]int parentId, [FromBody] Child child) {
        //implementation
    }
}

请注意,MapHttpRoute 中的 defaultsconstraints 参数都是匿名对象,其属性名称对应于 Web API 变量名称。由于action 变量不能通过 URL 设置,它会获取一个默认值,该值指向控制器中的 Web API 方法。

constraints 对象限制对给定正则表达式的调用。在这种情况下,它是固定的控制器名称,但也可以是多个控制器,例如通过"(Parents|ParentsAlternative)"。只有满足所有约束的 Web API 调用才会导致调用 Controller 方法,此处为 AddChildToParent

这里的Child 对象以JSON 形式传入HTTP 正文,如参数属性[FromBody] 中所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2013-03-15
    • 2013-05-29
    • 1970-01-01
    • 2016-07-04
    • 2015-11-08
    相关资源
    最近更新 更多