.NET的Web API - 几个GET和POST方法(.NET Web Api - severa

2019-09-22 07:08发布

我正在写一个REST API,并有以下问题:

随着资源/消息/,我在我的MessageController以下方法:

[HttpGet]
// retrieves all messages for a user
public HttpResponseMessage GetMessages(Guid RecordId) {}

[HttpGet]
// retrieves only a single messages, specified by guid
public HttpResponseMessage GetMessage(Guid RecordId) {}

在我WebApiConfig.cs我有以下路径:

config.Routes.MapHttpRoute(
    name: "MessageRouting",
    routeTemplate: "messages/{RecordId}/",
    defaults: new { controller = "Message", RecordId= RouteParameter.Optional }
);

这,当然,失败,因为路由不知道该调用哪个方法。 这里的问题是,保持平安,我想避免额外的查询参数,如

GET /messages/?userid=1

我应该相当拉离的accessToken和呼叫的getMessages如下的用户id?

GET /messages
AccessToken=foo

我将使用遇到了同样的问题[HttpPost]和[HttpPut]以及 - 我总有某一托收或单个项目,我想工作,所以对于每个HTTP方法,我将至少有2个方法调用。

我没有移动的getMessages()方法将UserController中的选项,因为在那里我会遇到同样的问题-似乎与网络API,控制器只能有每个HTTP方法确定一个单一的时间 ,这使得它可怕很难与收藏与单品的工作。

我剩下的REST风格,并具有唯一的URL标识资源之间的一个小撕裂,但似乎.NET这里不给我一个选择,我不能指定路由的HTTP方法。 或者,可以吗?

Answer 1:

找到了解决办法 - 在WebApiConfig.cs,你可以指定“name”属性的路线。 该属性可用于注释的方法,如:

public class MessageController() {

    [ActionName("MultipleMessages")]
    [HttpGet]
    public HttpResponseMessage GetMessages(Guid UserId) {}

    [ActionName("SingleMessage")]
    [HttpGet]
    public HttpResponseMessage GetMessage(Guid MessageId) {}

}

这样,你可以在同一个控制器几个GET或POST方法。 调用这些方法应该是这样的路线:

// multiple messages, will call MessageController.GetMessages()
config.Routes.MapHttpRoute(
    name: "MultipleMessages",
    routeTemplate: "users/{UserId}/messages",
    defaults: new { controller = "Message", UserId = RouteParameter.Optional }
);

// single messages, will call MessageController.GetMessage()
config.Routes.MapHttpRoute(
    name: "SingleMessage",
    routeTemplate: "messages/{MessageId}/",
    defaults: new { controller = "Message", MessageId = RouteParameter.Optional }
);


文章来源: .NET Web Api - several GET and POST methods