WEB API。找到了与请求匹配的多个操作

时间:2013-06-19 09:20:34

标签: asp.net-web-api

需要帮助。

我有2个控制器:

// POST (Single SMS)
[ActionName("AddSMS")]
public HttpResponseMessage Post(MySMS singleSMS)
{
    try
    {
        SMS_Repository.Add(singleSMS);
        return Request.CreateResponse<MySMS>(HttpStatusCode.Created, singleSMS);
    }
    catch (Exception)
    {
        return Request.CreateErrorResponse(HttpStatusCode.ExpectationFailed, "Error");
    }
}

// POST (Collection of SMSes)
[ActionName("AddSMSCollection")]
public HttpResponseMessage Post(List<MySMS> smses)
{
    try
    {
        SMS_Repository.Add(smses);
        return Request.CreateResponse<List<MySMS>>(HttpStatusCode.Created, smses);
    }
    catch (Exception)
    {
        return Request.CreateErrorResponse(HttpStatusCode.ExpectationFailed, "errorus");
    }
}

和路线:

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional, action = RouteParameter.Optional }

现在。如果我发送这样的请求:

本地主机:25856 / API / SMS / AddSMSCollection

它有效

是否可以调整路由以便我可以使用 localhost:25856 / api / sms 并且没有得到多个匹配请求错误的操作?

抱歉我的英语不好..

1 个答案:

答案 0 :(得分:1)

您可以定义在这种情况下应执行的操作:

defaults: new { id = RouteParameter.Optional, action = "AddSMS" }

但是只有以下网址localhost:25856/api/sms并且不包含操作名称,我希望您意识到路由引擎无法消除执行哪个操作的歧义。路由引擎可以使用HTTP谓词,但在您的情况下,这两个操作都是POST。