标签: asp.net-web-api-routing

使用Web API属性路由和RoutePrefix

使用web api时,如果使用,如何调用正确的路由方法 [RoutePrefix()]

假设您有类似"MyReallyLongNamedClassController"的内容.默认路由为http:... com/api/MyReallyLongNamedClass.然后应用程序通过名为Get,Post,Put等的方法(除非当然使用动词装饰器).

如果我[RoutePrefix("api/LongClass")]在我的控制器上放置一个路由前缀装饰器,我怎么能让web api仍然使用这些方法的默认值?

意思是,我希望名为"GetAll()"的方法仍然映射到"api/LongClass"(当使用get头时)和"PostThis(int id)"仍然映射到"api/LongClass/{id}"(当使用帖子标题时)

routing asp.net-web-api asp.net-web-api-routing

1
推荐指数
1
解决办法
1万
查看次数

您可以在 .NET WebApi Route URI 中使用正则表达式进行 API 版本控制吗

在 MVC 和 WebApi 中,您可以向路由添加参数约束(请参阅http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api- 2#约束)。您甚至可以对参数约束使用正则表达式。但是,我想知道是否可以使用正则表达式来处理 API 版本控制,其中许多路由可以/应该路由到相同的操作。

例如,我试图在实际 URI 中对我的 API 进行版本控制,如下所示:

/api/v3/SomeResource
Run Code Online (Sandbox Code Playgroud)

其中 v3 表示它是 API 的第 3 版。如果我使用的是 API 的第 3 版,则所有三个版本中的许多操作可能都没有变化,因此需要响应:

/api/v1/SomeResource
/api/v2/SomeResource
/api/v3/SomeResource
Run Code Online (Sandbox Code Playgroud)

因此,我希望能够像这样在我的路由属性中放置一个正则表达式: [Route("api/v(1|2|3)/SomeResource")] 但它似乎没有处理v(1|2|3) 作为正则表达式,而是将其视为文字。换句话说,对 /api/v1/SomeResource 的请求不会执行此操作。

有可能完成我想要完成的任务吗?有没有办法在我的路线中加入正则表达式?

提前致谢!

.net asp.net asp.net-mvc asp.net-web-api asp.net-web-api-routing

1
推荐指数
1
解决办法
6089
查看次数

在WebApi操作中使用C#关键字

我正在一个替换传统Web服务的控制器中编写一个动作.问题是我需要使用C#关键字(ref)作为参数.下面的代码将无法编译,因为我使用保留字ref.那么如何设置WebApi Routing来处理这个问题?

例:

public class MyController : BaseController
{
    [ActionName("RedirectToItem")]
    [HttpGet]
    public HttpResponseMessage RedirectToItem(int ref)
    {
         // Do stuff...
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

c# asp.net-web-api-routing

0
推荐指数
1
解决办法
421
查看次数

ASP.NET API路由

我正在研究ASP.NET 5 API,并且了解到,为了使API尽可能“轻松”,我们将Http动词用作方法名称。

我的问题是,如果我有多种方法可以做不同的事情,而所有方法都必须是HttpPost,会发生什么?

说,我有一种方法可以调用来更新用户的名字,也可以有另一种方法用于更新用户的城市。在这两种情况下,输入参数都是用户ID(GUID)和值为字符串的值。

[HttpPost("id")]
public void Post([FromRoute]id, [FromBody]firstName)
{
   // Change user's first name
}

[HttpPost("id")]
public void Post([FromRoute]id, [FromBody]city)
{
   // Change user's city
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何命名方法?

c# asp.net-web-api asp.net-web-api-routing asp.net-web-api2 asp.net-core

0
推荐指数
1
解决办法
299
查看次数

属性路由不适用于两个或多个控制器

我使用了属性路由并将RoutePrefix()设置为FirstController的默认路由.然后我创建了一个新的控制器并给出了它的默认路由.

运行时System.ArgumentException正在"GlobalConfiguration.Configure(WebApiConfig.Register);"上生成.在Global.asax中显示消息:

"路径段不能包含两个连续的参数.它们必须用'/'或文字字符串分隔."

这是FirstController.cs

     [System.Web.Http.RoutePrefix("api/First")]
 public class FirstController : ApiController
 {
     [System.Web.Http.HttpGet]
     [System.Web.Http.Route("Method1/{Param1}/{Param2}")]
     public int Method1(string Param1, string Param2)
     {
       //
     }
     [System.Web.Http.HttpGet]
     [System.Web.Http.Route("Method2/{Param1}/{Param2}")]
     public int Method2(string Param1, string Param2)
     {
       //
     }
 }
Run Code Online (Sandbox Code Playgroud)

这是SecondController.cs

[System.Web.Http.RoutePrefix("api/Second")]
 public class SecondController : ApiController
 {
     [System.Web.Http.HttpGet]
     [System.Web.Http.Route("Method3/{Param1}/{Param2}")]
     public int Method3(string Param1, string Param2)
     {
       //
     }
     [System.Web.Http.HttpGet]
     [System.Web.Http.Route("Method4/{Param1}/{Param2}")]
     public int Method4(string Param1, string Param2)
     {
       //
     }
 }
Run Code Online (Sandbox Code Playgroud)

这是我的Global.asax(以JSON格式返回数据)

protected void Application_Start()
    {
        GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
        GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建具有自己的默认路由的多个控制器.请帮忙.

c# asp.net-web-api-routing asp.net-web-api2

-1
推荐指数
1
解决办法
2177
查看次数