获取方法在网络中不起作用 api
Get method not working in web api
您好,我正在使用 web api2 和 angularjs 开发一个应用程序。我在从 angularjs.
访问 url 时遇到一些路由问题
我正在尝试访问 url。
var url = '/api/projects/4/processes';
我的控制器代码如下所示。
[RoutePrefix("api/processes")]
public class processesController : ApiController
{
[ActionName("projects/{projectsId}/processes")]
public HttpResponseMessage Get(int id)
{
return Request.CreateResponse(HttpStatusCode.OK, "");
}
}
我收到 404 错误。我打不中 url.
这是我的 webapi.config 文件。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
//routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
如有任何帮助,我们将不胜感激。
您有一个路由前缀,这意味着 url 的操作将是 RoutePrefix + ActionRoute
即HTTP GET api/processes/projects/{projectsId}/processes
参考 docs
在你的情况下,URL 应该是,
http://yourUrl/api/processes?projectsId=yourValue
此外,将您的 ActionName 更改为 Route 属性,
[RoutePrefix("api/processes")]
public class ProcessesController : ApiController
{
[Route("projects/{projectsId}/processes"),HttpGet]
public HttpResponseMessage Get(int projectsId)
{
return Request.CreateResponse(HttpStatusCode.OK, "");
}
}
首先确保在基于约定的路由之前启用属性路由。
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
如果预期的 url 是 /api/projects/4/processes
那么给定的操作需要更新其路由模板以匹配。控制器已经有一个路由前缀,但可以通过在路由模板前加上波浪号 ~
来覆盖它
在方法属性上使用波浪号 (~) 覆盖路由前缀:
//GET /api/projects/4/processes
[HttpGet]
[Route("~/api/projects/{projectsId:int}/processes")]
public HttpResponseMessage Get(int projectsId) { ... }
请确保在基于约定的路由之前启用属性路由。
config.MapHttpAttributeRoutes();
然后就可以做路由了
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
定义方法如:
//GET /api/projects/4/processes ([ActionName("projects/{projectsId}/processes")])
[RoutePrefix("api/processes")]
public class processesController : ApiController
{
[HttpGet]
[Route("~/api/projects/{projectId:int}/processes")]
public HttpResponseMessage Get(int projectId) { ... }
}
注释掉 ValuesController class 上的“[Authorize]”属性是我所需要的...
全部归功于 DotNetTutorials
来自文章:
“api/{controller}/{id}”
此时,如果您在浏览器中使用以下 URI,您将收到一条错误消息 – Authorization has been denied for this request。
http://localhost:xxxxx/api/values
要消除此错误,请在 ValuesController class 上注释 Authorize 属性。这个和安全有关,我们会在后面的文章中讨论。
您好,我正在使用 web api2 和 angularjs 开发一个应用程序。我在从 angularjs.
访问 url 时遇到一些路由问题我正在尝试访问 url。
var url = '/api/projects/4/processes';
我的控制器代码如下所示。
[RoutePrefix("api/processes")]
public class processesController : ApiController
{
[ActionName("projects/{projectsId}/processes")]
public HttpResponseMessage Get(int id)
{
return Request.CreateResponse(HttpStatusCode.OK, "");
}
}
我收到 404 错误。我打不中 url.
这是我的 webapi.config 文件。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
//routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
如有任何帮助,我们将不胜感激。
您有一个路由前缀,这意味着 url 的操作将是 RoutePrefix + ActionRoute
即HTTP GET api/processes/projects/{projectsId}/processes
参考 docs
在你的情况下,URL 应该是,
http://yourUrl/api/processes?projectsId=yourValue
此外,将您的 ActionName 更改为 Route 属性,
[RoutePrefix("api/processes")]
public class ProcessesController : ApiController
{
[Route("projects/{projectsId}/processes"),HttpGet]
public HttpResponseMessage Get(int projectsId)
{
return Request.CreateResponse(HttpStatusCode.OK, "");
}
}
首先确保在基于约定的路由之前启用属性路由。
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
如果预期的 url 是 /api/projects/4/processes
那么给定的操作需要更新其路由模板以匹配。控制器已经有一个路由前缀,但可以通过在路由模板前加上波浪号 ~
在方法属性上使用波浪号 (~) 覆盖路由前缀:
//GET /api/projects/4/processes
[HttpGet]
[Route("~/api/projects/{projectsId:int}/processes")]
public HttpResponseMessage Get(int projectsId) { ... }
请确保在基于约定的路由之前启用属性路由。
config.MapHttpAttributeRoutes();
然后就可以做路由了
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
定义方法如:
//GET /api/projects/4/processes ([ActionName("projects/{projectsId}/processes")])
[RoutePrefix("api/processes")]
public class processesController : ApiController
{
[HttpGet]
[Route("~/api/projects/{projectId:int}/processes")]
public HttpResponseMessage Get(int projectId) { ... }
}
注释掉 ValuesController class 上的“[Authorize]”属性是我所需要的... 全部归功于 DotNetTutorials
来自文章: “api/{controller}/{id}”
此时,如果您在浏览器中使用以下 URI,您将收到一条错误消息 – Authorization has been denied for this request。
http://localhost:xxxxx/api/values
要消除此错误,请在 ValuesController class 上注释 Authorize 属性。这个和安全有关,我们会在后面的文章中讨论。