C# 找到Web Api的几个操作

C# 找到Web Api的几个操作,c#,webapi2,C#,Webapi2,我有一个WebAPI2.0项目 当我尝试用相同的参数实现几个方法时,我有一个错误:发现了几个操作 namespace WebApi.Controllers { public class EventController : ApiController { [HttpGet] public HttpResponseMessage GetTags(string token, int messageId) { ret

我有一个WebAPI2.0项目 当我尝试用相同的参数实现几个方法时,我有一个错误:发现了几个操作

namespace WebApi.Controllers
{
    public class EventController : ApiController
    {
        [HttpGet]
        public HttpResponseMessage GetTags(string token, int messageId)
        {
            return ApiCall<List<EntityTag>>.CallApi(token, ServicesMessage.GetTags(messageId));
        }

        [HttpGet]
        public HttpResponseMessage Get(string token, int eventId)
        {
            return ApiCall<EntityEvent>.CallApi(token, ServicesEvent.Get(eventId));
        }
    }
}
名称空间WebApi.Controllers
{
公共类EventController:ApicController
{
[HttpGet]
公共HttpResponseMessage GetTags(字符串标记,int messageId)
{
返回ApiCall.CallApi(令牌,ServicesMessage.GetTags(messageId));
}
[HttpGet]
公共HttpResponseMessage获取(字符串标记,int-eventId)
{
返回ApiCall.CallApi(令牌,ServicesEvent.Get(eventId));
}
}
}
有什么想法吗


谢谢

在您的
webapiconfig.cs

  config.Routes.MapHttpRoute("DefaultApiPost", "Api/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
config.Routes.MapHttpRoute("DefaultApiPost", "Api/{controller}", new { action = "Post" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) });
您的控制器:

namespace WebApi.Controllers
{
    public class EventController : ApiController
    {
        [HttpGet]
        public HttpResponseMessage Tags(string token, int messageId)
        {
            return ApiCall<List<EntityTag>>.CallApi(token, ServicesMessage.GetTags(messageId));
        }

        [HttpGet]
        public HttpResponseMessage Events(string token, int eventId)
        {
            return ApiCall<EntityEvent>.CallApi(token, ServicesEvent.Get(eventId));
        }
    }
}
然后你可以给动作命名。使用此选项后,无需更改路由

当您要调用api时,请执行以下操作:

api/Event/Tags //parameter as per your requirement
api/Event/Events //parameter as per your requirement

WebAPI无法区分这两个方法,因为它们具有相同的参数类型和相同的HttpVerb,并且使用隐式路由(没有路由属性)

我非常喜欢控制器和方法的显式路由,而不是依赖于命名约定-因此我会尝试向方法添加路由属性:

public class EventController : ApiController
{
    [HttpGet]
    [Route("gettags")]
    public HttpResponseMessage GetTags(string token, int messageId)
    {
        return ApiCall<List<EntityTag>>.CallApi(token, ServicesMessage.GetTags(messageId));
    }

    [HttpGet]
    [Route("get")]
    public HttpResponseMessage Get(string token, int eventId)
    {
        return ApiCall<EntityEvent>.CallApi(token, ServicesEvent.Get(eventId));
    }
}
然后,您应该能够通过GET请求调用这些URL的方法:

/api/event/get?token=xxxxx&eventId=xxxx


startup.cs文件的外观如何?您应该指定路由,或者在rote中添加操作名称。模板应该是这样的:routeTemplate:“api/{controller}/{action}/{id}”谢谢你,伙计!!!:)
/api/event/get?token=xxxxx&eventId=xxxx
/api/event/gettags?token=xxxxx&messageId=xxxx