【问题标题】:Web api custom routingWeb api 自定义路由
【发布时间】:2012-05-03 16:08:12
【问题描述】:

我有一个名为 QuotaController 的控制器,我可以通过 httprequests 访问它,如下所示:

localhost:12345/quota/

我想要的是在某个地方放置一个端点,以便我可以像这样访问它:

localhost:12345/配额/增量

localhost:12345/配额/递减

如何做到这一点?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    您可以更改 Web api 路由定义以允许传递操作名称:

    routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
    

    然后:

    public class QuotaController : ApiController
    {
        public void Increment()
        {
            ...
        }
    
        public void Decrement()
        {
            ...
        }
    }
    

    【讨论】:

    • 我已经有这样的路由,现在配额控制器看起来像这样: public class QuotaController : ApiController { public HttpResponseMessage GetQuota(int id){} [System.Web.Http.HttpPost] public HttpResponseMessage SetQuota (int id, DocType doc, QuotaType quota, int value){} [System.Web.Http.HttpPost] public HttpResponseMessage Increment{} [System.Web.Http.HttpPost] public HttpResponseMessage Decrement{} } 我可以有多个吗在一个控制器中发布请求?
    • 是的,您可以拥有多个 POST 操作。
    • 您的网址似乎缺少api 前缀。不应该是localhost:15339/api/quota/increment吗?至少根据我在回答中显示的路线定义应该是这样的。
    • 我刚刚收到您的评论,抱歉:我在路由中留下了 api 前缀,但也从请求中留下了,所以没关系。但增量和减量具有相同的参数,我得到多个操作被发现错误:/
    • 但是如果你去掉 api 前缀,你怎么能区分你的 API 控制器和你的标准控制器呢?或者在这个 ASP.NET MVC 应用程序中,您只有 API 控制器而没有 UI?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多