C# 同一Web API应用程序上的两个控制器
我正在尝试向现有的Web API添加一个控制器。控制器就像C# 同一Web API应用程序上的两个控制器,c#,asp.net,asp.net-mvc,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,我正在尝试向现有的Web API添加一个控制器。控制器就像 public class TDataController : ApiController { [HttpGet] public HttpResponseMessage Getdetails(string ROOM, DateTime DOB_GT, DateTime DOB_LT, string STATUS_TYPE) { // Code for the controller } }
public class TDataController : ApiController
{
[HttpGet]
public HttpResponseMessage Getdetails(string ROOM, DateTime DOB_GT, DateTime DOB_LT, string STATUS_TYPE)
{
// Code for the controller
}
}
这就是我试图在同一个应用程序中添加的控制器
public class TDataSubDateController : ApiController
{
[HttpGet]
public HttpResponseMessage Getdetails(string ROOM, string STATUS_TYPE, DateTime? SUBDATE_GT = null, DateTime? SUBDATE_LT = null)
{
//Code for the controller
}
}
当我试图调用第二个控制器时
但是它抛出http404页面未找到
错误。我是否必须在WebConfig.cs中创建不同的路由。RouteConfig.cs当前看起来像
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 static class WebApiConfig
{
/// <summary>
/// configure global routes
/// </summary>
/// <param name="config"></param>
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
如果您使用的是web api 2,则可以使用属性路由。欲了解更多详情,请访问 下面是一个具有单个控制器和多个操作的示例
[RoutePrefix("api/tdata")]
public class TDataController : ApiController
{
[HttpGet]
[Route("{ROOM}/preview")]
public IHttpActionResult Getdetails(string ROOM, [FromUri]DateTime DOB_GT, [FromUri]DateTime DOB_LT, [FromUri]string STATUS_TYPE)
{
return Ok(string.Format("Room {0} Preview", ROOM));
}
[HttpGet]
[Route("{ROOM}/details")]
public IHttpActionResult Getdetails(string ROOM, [FromUri]string STATUS_TYPE, [FromUri]DateTime? SUBDATE_GT = null, [FromUri]DateTime? SUBDATE_LT = null)
{
return Ok(string.Format("Room {0} Details", ROOM));
}
}
或放入一个单独的控制器中
[RoutePrefix("api/tdatasubdate")]
public class TDataSubDateController : ApiController
{
[HttpGet]
public IHttpActionResult Getdetails([FromUri]string ROOM, [FromUri]string STATUS_TYPE, [FromUri]DateTime? SUBDATE_GT = null, [FromUri]DateTime? SUBDATE_LT = null)
{
return Ok(string.Format("Room {0} Details", ROOM));
}
}
下面是webapiconfig.cs的样子
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 static class WebApiConfig
{
/// <summary>
/// configure global routes
/// </summary>
/// <param name="config"></param>
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
公共静态类WebApiConfig
{
///
///配置全局路由
///
///
公共静态无效寄存器(HttpConfiguration配置)
{
//Web API路由
config.maphttpAttribute路由();
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
}
}
如果您使用的是web api 2,则可以使用属性路由。欲了解更多详情,请访问
下面是一个具有单个控制器和多个操作的示例
[RoutePrefix("api/tdata")]
public class TDataController : ApiController
{
[HttpGet]
[Route("{ROOM}/preview")]
public IHttpActionResult Getdetails(string ROOM, [FromUri]DateTime DOB_GT, [FromUri]DateTime DOB_LT, [FromUri]string STATUS_TYPE)
{
return Ok(string.Format("Room {0} Preview", ROOM));
}
[HttpGet]
[Route("{ROOM}/details")]
public IHttpActionResult Getdetails(string ROOM, [FromUri]string STATUS_TYPE, [FromUri]DateTime? SUBDATE_GT = null, [FromUri]DateTime? SUBDATE_LT = null)
{
return Ok(string.Format("Room {0} Details", ROOM));
}
}
或放入一个单独的控制器中
[RoutePrefix("api/tdatasubdate")]
public class TDataSubDateController : ApiController
{
[HttpGet]
public IHttpActionResult Getdetails([FromUri]string ROOM, [FromUri]string STATUS_TYPE, [FromUri]DateTime? SUBDATE_GT = null, [FromUri]DateTime? SUBDATE_LT = null)
{
return Ok(string.Format("Room {0} Details", ROOM));
}
}
下面是webapiconfig.cs的样子
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 static class WebApiConfig
{
/// <summary>
/// configure global routes
/// </summary>
/// <param name="config"></param>
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
公共静态类WebApiConfig
{
///
///配置全局路由
///
///
公共静态无效寄存器(HttpConfiguration配置)
{
//Web API路由
config.maphttpAttribute路由();
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
}
}
路由配置是针对MVC的,而不是针对Web API的。如何处理同一API中的两个控制器。为了进行测试,我使用了相同的代码并创建了单独的Web API,它工作得非常好,并返回结果。您需要找到Web API路由的配置位置。如果使用默认模板,则可能WebApiConfig.cs
。我已经用WebConfig.cs编辑了我的问题。我必须在这里创建新路由吗?尝试使用路由属性:该路由配置是针对MVC的,而不是针对Web API的。我如何处理同一API中的两个控制器。为了进行测试,我使用了相同的代码并创建了单独的Web API,它工作得非常好,并返回结果。您需要找到Web API路由的配置位置。如果使用默认模板,则可能WebApiConfig.cs
。我已经用WebConfig.cs编辑了我的问题。我必须在这里创建新路由吗?尝试使用路由属性:我们不需要在WebConfig.cs中更改任何内容吗?我尝试添加[Route(“api/tdatasubdate”)],并尝试以http://localhost:33823/api/tdatasubdate?ROOM=xxx&STATUS_TYPE=xxx&SUBDATE_GT=xxxx&SUBDATE_LT=xxxx
它仍然不工作。在应用程序启动时,您是否有以下语句?GlobalConfiguration.Configure(WebApiConfig.Register);通常它放在global.asax.cs中是的,我在global.asax.cs中有声明。我可以浏览其他控制器的TData。这只是TDataSubDate控制器的问题控制器的url是什么?你能在另一个测试项目中重现错误吗?我们不需要在WebConfig.cs中更改任何内容吗?我尝试添加[Route(“api/tdatasubdate”)],并尝试以http://localhost:33823/api/tdatasubdate?ROOM=xxx&STATUS_TYPE=xxx&SUBDATE_GT=xxxx&SUBDATE_LT=xxxx
它仍然不工作。在应用程序启动时,您是否有以下语句?GlobalConfiguration.Configure(WebApiConfig.Register);通常它放在global.asax.cs中是的,我在global.asax.cs中有声明。我可以浏览其他控制器的TData。这只是TDataSubDate控制器的问题控制器的url是什么?你能在另一个测试项目中重现错误吗?