HttpGetAttribute不包含带有1个参数的构造函数

时间:2018-10-09 10:38:37

标签: c# asp.net-core-mvc

当前,我正在使用Microsoft MVC框架开发Web API。 在他们的文档中,我阅读了以下内容(https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.1):

为方便起见,属性路由通过将令牌括在方括号([,])中来支持令牌替换。标记[动作],[区域]和[控制器]将被定义路径的动作中的动作名称,区域名称和控制器名称的值替换。在此示例中,操作可以匹配注释中所述的URL路径:

[Route("[controller]/[action]")]
public class ProductsController : Controller
{
    [HttpGet] // Matches '/Products/List'
    public IActionResult List() {
        // ...
    }

    [HttpGet("{id}")] // Matches '/Products/Edit/{id}'
    public IActionResult Edit(int id) {
        // ...
    }
}

令牌替换发生在构建属性路由的最后一步。上面的示例的行为与以下代码相同:

public class ProductsController : Controller
{
    [HttpGet("[controller]/[action]")] // Matches '/Products/List'
    public IActionResult List() {
        // ...
    }

    [HttpGet("[controller]/[action]/{id}")] // Matches '/Products/Edit/{id}'
    public IActionResult Edit(int id) {
        // ...
    }
}

但是,每当我尝试使用[HttpGet("my/route")]属性时,Visual Studio都会不断告诉我“ HttpGetAttribute不包含带有1个参数的构造函数”。我已经读过我应该使用软件包管理器安装Microsoft.AspNet.WebApi.WebHost,但是错误仍然存​​在。

我的问题是,我如何才能开始使用适当的属性?我对在Visual Studio中安装软件包并不陌生。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

只有ASP.NET Core具有带有Http [Verb]属性的属性路由。如果您有ASP.NET Framework项目,则应使用RouteAttribute

ASP.Net核心:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.1

ASP.NET Framework:https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

答案 1 :(得分:0)

尝试这个

[RoutePrefix("Products")]
public class ProductsController : Controller
{
    [HttpGet]
    [Route("api/List")]
    public IActionResult List() {
        // ...
    }

    [HttpGet]
    [Route("api/Edit/{id}")]
    public IActionResult Edit(int id) {
        // ...
    }
}

答案 2 :(得分:-1)

我相信您会混淆属性。

可以用[HttpGet]装饰动作,但是此属性不带有用于路由的参数。

您的操作可能类似于:

[HttpGet]
[Route("{id"}]
public IActionResult Edit(int id) {
      // ...
}