获取方法在网络中不起作用 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, "");
    }
}

新 URL - http://yourUrl/api/processes/projects/2/processes

More info on Attribute routing

首先确保在基于约定的路由之前启用属性路由。

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) { ... }

来源:Attribute Routing in ASP.NET Web API 2

请确保在基于约定的路由之前启用属性路由。

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 属性。这个和安全有关,我们会在后面的文章中讨论。