发现MVC4 WebAPI多个操作与请求匹配



我已经搜索了一段时间,但是我发现的任何帮助都没有解决我的问题。我有一个MVC4 WebAPI项目,我得到了"发现多个操作与请求相匹配..."问题。

这是我的控制器:

public class DataEntryController : ApiController
{
    [HttpPost]
    [ActionName("GetMessageId")]
    public HttpResponseMessage GetMessageId(HttpRequestMessage request)
    {
    }
    [HttpPost]
    [ActionName("RequestXmlDataEntry")]
    public HttpResponseMessage RequestXmlDataEntry(HttpRequestMessage request)
    {
    }
    [HttpPost]
    [ActionName("SendConfirmationXmlDataEntry")]
    public HttpResponseMessage SendConfirmationXmlDataEntry(HttpRequestMessage request)
    {
    }
    [HttpPost]
    [ActionName("SendEvent")]
    public HttpResponseMessage SendEvent(HttpRequestMessage request)
    {
    }
}

这是我的路线:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.Routes.MapHttpRoute(
            name: "API Default 2",
            routeTemplate: "api/{controller}/{action}");
        config.Routes.MapHttpRoute(
            name: "API Default",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional });
    }
}

这是我的请求的样子:

public static string PostRequestToRestMethod(string url, string data, IWebProxy proxy, int timeout)
    {
        byte[] byteArray = Encoding.UTF8.GetBytes(data);
        string responseFromServer = string.Empty;
        HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(url);
        webrequest.Method = "POST";
        webrequest.ContentType = "text/xml";
        webrequest.ContentLength = byteArray.Length;
        webrequest.Timeout = timeout;
        if (proxy != null)
            webrequest.Proxy = proxy;
        var dataStream = webrequest.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();
        HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();
        using (StreamReader responseStream = new StreamReader(webresponse.GetResponseStream(), Encoding.UTF8))
        {
            responseFromServer = responseStream.ReadToEnd();
        }
        webresponse.Close();
        return responseFromServer;
    }

我正在使用.NET Framework 4.0,因此WebAPI 2对我来说是不可能的。有什么tughts?

您不需要创建不同的outs。您的三个路线都可以使用此单一路线来处理。

public static class WebApiConfig
{
     public static void Register(HttpConfiguration config)
     {             
         config.Routes.MapHttpRoute(
            name: "API Default",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional });
    }
}

最新更新