当输入是 URL 中的 int 参数时,如何防止浏览器返回 int 的默认值?

How to prevent Browser returning default value of int when input is an int parameter in the URL?

  public IActionResult Info(int id)
            {
                return Content(id + "");
            }

每当我输入 Jan/Info/2 浏览器时 returns 我的值是 0。这是为什么?我该如何解决?我正在使用 MVC 核心 1.1。 UrlParameter.Optional 也因为某些原因无法访问 Visual Studio 中。

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "Naam",
                    template: "{controller=Jan}/{action}/{voornaam}");
                routes.MapRoute(
                     name: "Info",
                     template: "{controller=Jan}/{action}/{id}");

            }


 public IActionResult Naam(string voornaam)
        {

            return Content(voornaam);
        }

因为您已经注册了另一个与确切模式匹配的路由。根据该注册,它将读取值并分配给 voornaam 参数。

所以这应该有效

public IActionResult Info(int voornaam)
{
    return Content(voornaam + "");
}

由于您的操作方法具有唯一的名称,因此您无需为每个操作方法指定自定义路由。默认路由注册就可以了。

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "defaultroutes",
        template: "{controller}/{action=Index}/{id?}",
        defaults: new { controller = "jan" });
});

假设您的控制器看起来像这样

public class JanController : Controller
{
    public IActionResult Info(int id)
    {
        return Content(id + " : id");
    }
    public IActionResult Naam(string voornaam)
    {
        return Content(voornaam+ ": param value");
    }
}

当您访问 yourSite/jan/info/123 时,Info 方法将处理它,而当您请求 yourSite/jan/Naam?voornaam=shyju 时,Naam 方法将处理它。

如果您想支持 url 结构,例如 yourSite/jan/Naam/shyju 而不是显式查询字符串,您可以在该操作方法上使用属性 routing

指定路由模式
public class JanController : Controller
{
    public IActionResult Info(int id)
    {
        return Content(id + " id");
    }
    [Route("[controller]/[action]/{voornaam}")]
    public IActionResult Naam(string voornaam)
    {
        return Content(voornaam + " : param value");
    }
}

现在,当您请求 yourSite/jan/Naam/shyju 时,将调用 Naam 方法,并且字符串 "shyju" 将在 voornaam 参数

中可用