C# 不区分url路径中的操作名称-asp.net web api
在我的C# 不区分url路径中的操作名称-asp.net web api,c#,asp.net-mvc,asp.net-web-api,routing,C#,Asp.net Mvc,Asp.net Web Api,Routing,在我的APIController中调用操作时,我遇到了非常奇怪的路由问题。我有一个WebApp,但需要一个APIController,所以我将它以及WebAPIConfig.cs添加到App\u start和Global.asax 但是,当我尝试在APIController中调用不同的操作时,除非添加参数,否则似乎无法区分操作。例如,如果我调用api/controller/happy,它将输入与api/controller/sad相同的Action。它输入首先在控制器中创建的操作 这对我来说毫无
APIController
中调用操作时,我遇到了非常奇怪的路由问题。我有一个WebApp,但需要一个APIController
,所以我将它以及WebAPIConfig.cs
添加到App\u start和Global.asax
但是,当我尝试在APIController
中调用不同的操作时,除非添加参数,否则似乎无法区分操作。例如,如果我调用api/controller/happy
,它将输入与api/controller/sad
相同的Action
。它输入首先在控制器中创建的操作
这对我来说毫无意义,URL中没有考虑动作名称
我的API控制器:
public class RegistrationManagerController : ApiController
{
EventHelper eh = new EventHelper();
[HttpGet]
public IHttpActionResult IsUserRegistered(string skypeid)
{
var skypeuser = Exist.CheckIfRegistered(skypeid);
return Ok(skypeuser);
}
[HttpGet]
public async Task<IHttpActionResult> Happy()
{
var events = await eh.GetHappyRecent();
return Ok(events);
}
[HttpGet]
public async Task<IHttpActionResult> Sad()
{
var events = await eh.GetSadRecent();
return Ok(events);
}
[HttpPost]
public async Task<IHttpActionResult> UpdateEvent() //TODO id send in body?
{
await eh.Update("id");
return Ok();
}
}
My RouteConfig(这是一个web应用程序,不是web API):
WebApi遵循REST原则,因此它的路由方式与MVC控制器的路由方式不同
看看这个答案,我想它会对你有所帮助
WebApi遵循REST原则,因此它的路由方式与MVC控制器的路由方式不同
看看这个答案,我想它会对你有所帮助
路由模板应为
routeTemplate:“api/{controller}/{action}/{id}”routeTemplate应该是
routeTemplate:“api/{controller}/{action}/{id}”看这里,看起来你的确切问题你的routeTemplate不包含操作,这里只有controllerSee,看起来你的确切问题你的routeTemplate不包含操作,只有控制器
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();// New feature
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}