【问题标题】:Multiple Post requests in WebApi with same parameter types and different [Route("/cars")]/[RoutePrefix("api/v1/data")]WebApi中具有相同参数类型和不同[Route("/cars")]/[RoutePrefix("api/v1/data")]的多个Post请求
【发布时间】:2018-12-29 04:28:45
【问题描述】:

我正在尝试将具有重复操作的 WebAPI 控制器合并,以限制控制器蔓延。当我尝试使用 [RoutePrefix("")] 和不同的方法级别 [Route("")]

尝试执行此操作时,这将需要一个控制器“具有相同参数类型”的多个帖子

我可以做些什么来允许多个 Post 请求?

错误: CS0111 类型“DataController”已经定义了一个名为“Post”且参数类型相同的成员

来自 packages.config

的 WebApi 版本
<package id="Microsoft.AspNet.WebApi" version="5.2.6" targetFramework="net461" />

示例代码:

using System.Collections.Generic;
using System.Web.Http;

namespace UberCool.v1.Data.Controllers
{
    [RoutePrefix("api/v1/data")]
    public class DataController : ApiController
    {
        [Route("/cars")]
        public List<Cars> Post()
        {
            var response = new CarsSFTP().GetData();
            return response;
        }

        [Route("/trucks")]
        public List<Trucks> Post()
        {
            var response = new TrucksSFTP().GetData();
            return response;
        }
    }
}

谢谢!

【问题讨论】:

  • 称他们为 PostCars 和 PostTrucks。但实际上,为什么在您获得汽车和卡车时发布?
  • 我尝试了您建议的方法名称前缀,并且确实有效。我没有意识到字符串将方法名称的第一部分拆分为重复项。这解决了我试图解决的问题。至于动词的选择,我同意你保持标准,这只是一个例子,但我应该使用 GET 来简化它。

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


【解决方案1】:

正如 ckuri 建议的那样。

利用方法名称中的 HTTP 动词作为前缀。以下两个都将被视为 Post 请求。如果我包含路由,它们可以是相同的控制器,但方法不同。从上面查看调整后的示例代码。

- PostMyRandomMethod()
- PostMyRandomMethod2()

using System.Collections.Generic;
using System.Web.Http;

namespace UberCool.v1.Data.Controllers
{
    [RoutePrefix("api/v1/data")]
    public class DataController : ApiController
    {
        [Route("/cars")]
        public List<Cars> PostMyRandomMethod()
        {
            var response = new CarsSFTP().GetData();
            return response;
        }

        [Route("/trucks")]
        public List<Trucks> PostMyRandomMethod2()
        {
            var response = new TrucksSFTP().GetData();
            return response;
        }
    }
}

【讨论】:

  • 由于这似乎只是为了让 IDE 检测错误,因此最好检查 Route/RoutePrefix 集合而不是抛出错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多