这是我第一次使用MVC,但是我一直在尝试使webApi路由正常工作。
我有一个看起来像这样的简单控制器
namespace XRM.Controllers
{
public class PipelinesWebApiController : ApiController
{
static List<XRM.Models.XRM_PipelineStages> stages = new List<Models.XRM_PipelineStages>
{
new Models.XRM_PipelineStages() { stageName = "test" },
new Models.XRM_PipelineStages() { stageName = "test2" },
new Models.XRM_PipelineStages() { stageName = "test3" }
};
public IEnumerable<XRM.Models.XRM_PipelineStages> Get()
{
return stages;
}
public XRM_PipelineStages Get(int id)
{
return stages.FirstOrDefault(s => s.ROWUID == id);
}
}
}
WebApiConfig:
namespace XRM {
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
Global.asax.cs
namespace XRM {
public class MvcApplication : HttpApplication {
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
DevExtremeBundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
每当我尝试使用
访问时http://localhost:58061/api/PipelinesWebApi
我收到错误消息:
未找到与请求URI'http://localhost:58061/api/PipelinesWebApi'相匹配的HTTP资源。
我检查了 WebApiConfig.cs 中是否也有config.MapHttpAttributeRoutes();
。
我真的不知道为什么我似乎无法达到目标。
答案 0 :(得分:1)
您的代码在我的末端运行良好。我无法重现此问题。无论如何,您可以尝试如下所示的另一种路由方式:
在routeTemplate
中将"api/{controller}/{action}/{id}"
更改为WebApiConfig.cs
,并调用该URL以及动作名称,例如api/PipelinesWebApi/Get
答案 1 :(得分:0)
由于基于约定的路由似乎无法正常工作,请考虑使用属性路由
[RoutePrefix("api/PipelinesWebApi")]
public class PipelinesWebApiController : ApiController {
static List<XRM.Models.XRM_PipelineStages> stages = new List<Models.XRM_PipelineStages>
{
new Models.XRM_PipelineStages() { stageName = "test" },
new Models.XRM_PipelineStages() { stageName = "test2" },
new Models.XRM_PipelineStages() { stageName = "test3" }
};
//GET api/PipelinesWebApi
[HttpGet]
[Route("")]
public IHttpActionResult Get() {
return Ok(stages);
}
//GET api/PipelinesWebApi/1
[HttpGet]
[Route("{id:int}")]
public XRM_PipelineStages Get(int id) {
var result = stages.FirstOrDefault(s => s.ROWUID == id);
if(result != null) return Ok(result);
return NotFound();
}
}