C# 如何定义WebApi路由访问方法

C# 如何定义WebApi路由访问方法,c#,.net,asp.net-web-api,C#,.net,Asp.net Web Api,我想使用除“获取”、“推送”、“修补”以外的方法 我有权访问员工控制员: [RoutePrefix("api/employee")] public class EmployeeController : ApiController { public HttpResponseMessage Get() { } public HttpResponseMessage Get(int employeeid) {} public Htt

我想使用除“获取”、“推送”、“修补”以外的方法

我有权访问员工控制员:

    [RoutePrefix("api/employee")]
    public class EmployeeController : ApiController
    {
        public HttpResponseMessage Get() { }
        public HttpResponseMessage Get(int employeeid) {}
        public HttpResponseMessage Post([FromBody] EmployeeModel model){}

        [HttpPut]
        [HttpPatch]
        public HttpResponseMessage Patch([FromBody] EmployeeModel model){}

        [Route("initialisation")]
        public HttpResponseMessage Initialisation() {}
    }
我可以毫无问题地访问:

http://localhost/employee
http://localhost/employee/1
我想使用“初始化”方法:

我添加了路由“DefaultApi”,但在尝试时出现以下错误:

{
  "$id": "1",
  "message": "The request is invalid.",
  "messageDetail": "The parameters dictionary contains a null entry for parameter 'employeeid' of non-nullable type 'System.Int32' 
  for method 'System.Net.Http.HttpResponseMessage Get(Int32)' in 'Pme.WebApi.Controllers.EmployeeController'. 
  An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
}

谢谢,

我想这应该行得通。您可以尝试如下修改
WebApiConfig

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                //routeTemplate: "api/{controller}/{id}",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
这样,控制器名和操作名都保持打开状态,使其成为动态名称,并尝试点击将按照此格式生成的URL

更新:

注释“员工”路线代码。只需保持“DefaultApi”路由处于活动状态。现在尝试点击此URL:

http://localhost:1955/api/Employee/Create/parameters

显然,您需要根据您的主机名和参数来保留主机名

希望这能有所帮助。

尝试以下方法:

改变

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


只有将最后一个ID参数的名称从“ID”更改为“employeeid”

您需要在WebApiConfig中注册属性路由

config.MapHttpAttributeRoutes();

或者,您可以指定路线的确切位置

config.Routes.MapHttpRoute("Initialisation", "api/employee/initialisation",
                new {controller = "employee", action = "initialisation"});

@Puneet可能重复我尝试了此解决方案,但收到一个错误“employeeid”必须为空,并且对工作方法的调用不再有效。您需要在WebApiConfig文件中同时使用这两种路由(默认路由和帖子中建议的新路由)。您真的认为我没有尝试吗?与您的问题没有直接关系,但为什么“创建”方法?您不应该在员工集合上发布(或放置)吗?我已经尝试了,但没有解决问题。请参阅我在帖子中添加的错误。我没有在controller@Kris-我刚刚更新了答案。请再试一次。请记住Puneet下面的建议。我需要“员工”“路由,我根据路由创建一些URL,而不是在代码中的任何地方进行加密(甚至部分加密)。请尝试以与上面相同的方式创建路由,但要包含员工详细信息,即控制器名称、操作名称和参数名称。但是在上面的格式中。
config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{employeeid}",
            defaults: new { action = "get", employeeid= RouteParameter.Optional }
        );
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute("Initialisation", "api/employee/initialisation",
                new {controller = "employee", action = "initialisation"});