如何在.net core中调用带参数的动作? - c#

因此,我在Startup.cs中设置了以下默认模式:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller}/{action}/{id?}");
});

这是我的控制器:

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    [Route("[action]")]
    public IEnumerable<WeatherForecast> Get()
    {
        var rng = new Random();
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(-20, 0),
            Summary = Summaries[rng.Next(Summaries.Length)]
        })
        .ToArray();
    }

    [HttpGet]
    [Route("[action]")]
    public IEnumerable<WeatherForecast> Grab()
    {
        var rng = new Random();
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(1, 55),
            Summary = Summaries[rng.Next(Summaries.Length)]
        })
        .ToArray();
    }

    [Route("[action]")]
    [HttpGet("{i:int}")]
    public IEnumerable<WeatherForecast> Snatch(int i)
    {
        var rng = new Random();
        return Enumerable.Range(i, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(55, 100),
            Summary = Summaries[rng.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

现在,当我调用https://localhost:44388/weatherforecast/grabhttps://localhost:44388/weatherforecast/get时,它可以正常工作,但是如果我调用https://localhost:44388/weatherforecast/Snatch/1,则在浏览器中会显示Error: Cannot match any routes.

我已将最后一个方法Snatch设置为需要一个int的参数,那么我在做什么错呢?

参考方案

您需要使用一个路由模板才能获得所需的行为

//GET weatherforecast/Snatch/1
[Route("[action]/{i:int}")]
[HttpGet]
public IEnumerable<WeatherForecast> Snatch(int i) {
    //...
}

现在,由于这是一个ApiController,仅对所有操作使用Http{Verb}就足够了

构建REST API时,很少会在操作方法上使用[Route(...)],因为该操作将接受所有HTTP方法。最好使用更具体的Http*Verb*Attributes来精确了解您的API支持的内容。期望REST API的客户端知道哪些路径和HTTP动词映射到特定的逻辑操作。

//GET weatherforecast/Snatch/1
[HttpGet("[action]/{i:int}")]
public IEnumerable<WeatherForecast> Snatch(int i) {
    //...
}

通过汇总模板可以进一步简化此操作

[ApiController]
[Route("[controller]/[action]")] //<-- NOTE THIS
public class WeatherForecastController : ControllerBase {

    //...

    //GET weatherforecast/get
    [HttpGet]
    public IEnumerable<WeatherForecast> Get() {
        //...
    }

    //GET weatherforecast/grab
    [HttpGet]
    public IEnumerable<WeatherForecast> Grab() {
        //...
    }

    //GET weatherforecast/Snatch/1
    [HttpGet("{i:int}")]
    public IEnumerable<WeatherForecast> Snatch(int i) {
        //...
    }
}

参考Routing to controller actions in ASP.NET Core

参考Routing in ASP.NET Core

如何将POCO类传递给.NET Core配置 - c#

我正在进行.NET Core应用程序的集成测试,并且想要使用一些测试配置。我的配置是一个POCO类,该类通过appsettings.json配置,然后通过IOptions<T>使用。在我的测试中,我想使用该类的实例。这是代码: var mySettings = GetTestSettings(); // factory method return…

java.net.URI.create异常 - java

java.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…

调用SignalR Hub不适用于Asp.Net Core Web API - c#

我是SignalR的新手。我正在尝试设置一个Asp.Net Core WebAPI,以便其他客户端可以使用SignalR连接到它并获取实时数据。我的Hub类是:public class TimeHub : Hub { public async Task UpdateTime(string message) { await Clients.All.SendAs…

Visual Studio,ASP.Net(.Net Framework),并在项目中包含NuGet安装的软件包 - javascript

我在Visual Studio 2017中有一个主要由JavaScript组成的ASP.Net(.Net Framework)MVC Web应用程序。我已经使用NuGet安装了一个软件包(特别是marker-animate-unobtrusive软件包。)文档继续说我应该在我的HTML页面中包含JavaScript,但是在仔细检查了NuGet的内容后,我不确…

ImageButton中的无效回发或回调参数 - c#

我的Click事件删除按钮(图像按钮)时遇到问题。我知道对此还有其他疑问,但是我什么都不懂!我不明白没有答案!我做了所有其他所有问题中指定的内容!此页面中使“重定向”到示例的其他事件效果很好!我很清楚?需要更多细节吗?堆栈跟踪或更多代码?错误是: 无效的回发或回调参数。使用配置或页面中的启用事件验证。为了安全起见,此功能验证回发或回调事件的参数源自最初呈现它…