【问题标题】:Dash in url (mapped to the action)网址中的破折号(映射到操作)
【发布时间】:2016-01-15 05:13:40
【问题描述】:

我尝试实现一个支持 JsonApi 标准的 ASP.NET Web Api 控制器(http://jsonapi.org/ 主要由 Ember.js 使用)

网址可能包含破折号。但C#代码中对应的方法名可能不包含破折号。

我的 javascript 尝试发布到

http://localhost:50000/jsonapi/activity-exercises

但我无法实现可以接收该请求的端点。 我试过了:

[HttpPost]
public HttpResponseMessage ActivityExercises([FromBody] ActivityExerciseEntry value)
{
   // ...

理想情况下,应该有一个属性添加到方法中,以在 URL 中指定映射的操作名称。有这样的属性吗?

我的路线图如下所示:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapHttpRoute("EmberJsonApi", "jsonapi/{action}/{id}", new { controller = "JsonApi", id = RouteParameter.Optional });
    routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional });
}

【问题讨论】:

  • 您是否尝试过通过您的操作的属性指定路由? [Route("jsonapi/activity-exercises")]
  • [ActionName("activity-exercises")]?
  • 我建议您切换到“属性”路由而不是“基于约定”的路由,因为您的 URI 很好......非常规(至少就 .NET 而言)asp.net/web-api/overview/web-api-routing-and-actions/…跨度>
  • 谢谢@Rob。属性路由当然看起来很有希望。
  • 谢谢@Shelby115。属性路由当然看起来很有希望。

标签: c# asp.net-web-api json-api


【解决方案1】:

我想通了。这需要大量的谷歌搜索,因为这没有很好的记录....

正如我所怀疑的,我可以使用一个属性:[ActionName]

所以端点定义看起来像这样:

[HttpPost]
[ActionName("activity-exercises")]
public HttpResponseMessage ActivityExercises([FromBody] ActivityExerciseEntry value)
{
   ...

【讨论】:

    猜你喜欢
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2016-02-28
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多