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

时间:2017-11-16 16:02:40

标签: asp.net-mvc-4

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

每当我输入Jan / Info / 2时,浏览器都会返回值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);
        }

1 个答案:

答案 0 :(得分:0)

因为您已经有另一个与确切模式匹配的路径注册。根据该注册,它将读取值并分配给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方法将处理该问题。

如果要支持yourSite/jan/Naam/shyju之类的网址结构而不是显式查询字符串,可以使用属性路由指定该操作方法的路由模式

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参数

中提供