0

需要帮忙。

我有 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并且没有找到与请求错误匹配的多个操作?

对不起,我的英语不好..

4

1 回答 1

1

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

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

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

于 2013-06-19T09:32:23.353 回答