当我尝试使用get url来访问我的API控制器时,出现以下错误:


  找到多个符合要求的动作:
  
  类型BlexzWeb.Controllers.ApiDevToolController上的IsStoreKeyValid
  BlexzWeb.Controllers.ApiDevToolController类型上的GetPageIds


WebApiConfig.cs如下所示:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

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

        //code bellow used to return json on api call
        GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings
            .Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept",
                 "text/html",
                 StringComparison.InvariantCultureIgnoreCase,
                 true,
                 "application/json"));
    }
}


控制器代码:

public class ApiDevToolController : ApiController
{
    private bool IsValid { get; set; }

    [HttpGet]
    public IHttpActionResult IsStoreKeyValid(string storeName, string storeKey)
    {
    }

    //get list of pageids
    [HttpGet]
    public IHttpActionResult GetPageIds(string storeName, string storeKey)
    {
    }
}


我用来打控制器的网址:http://localhost:49817/api/apidevtool/isstorekeyvalid?storeName=test.myblexz.com&storeKey=fdesfhkfg5g437dfgh5u

我在这里做什么错?知道如何解决吗?

最佳答案

发生这种情况是因为您的第二个动作名称以Get ...开头,并且它具有与第一个动作相同的参数(IsStoreKeyValid(string storeName,string storeKey))

默认情况下,如果操作为HttpGet,则它将搜索以GetSomething开头的操作名称
并检查参数。更多信息MSDN

您需要更改第二个函数名称或需要使用属性路由

例如[Route(“ pageIds”)]

更多信息attribute routing

09-27 00:32