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"});