ASP.NET MVC:相同的url多个操作



我有一个类似/register/new-user的url。

如果该url具有参数(如/register/new-user?a=1(,则执行自身控制器,但如果该url没有任何参数,则执行checkuser控制器的newuser操作。

但是我不能使用重定向,因为我关心谷歌索引。

你能帮我吗?

更新

我在webconfig中使用了urlrewrite,解决了我的问题。

<rule name="rulename" stopProcessing="true">
<match url="^register/newuser$" ignoreCase="false" />
<conditions>
<add input="{QUERY_STRING}" pattern="ref=" negate="true" />
</conditions>
<action type="Rewrite" url="/checkuser" appendQueryString="false"/>

您可以使用Route属性对不同的操作具有相同的url-

[HttpGet]
[Route("register/new-user")]
public string CheckUser()
{
return "Check User";
}
[HttpGet]
[Route("register/new-user")]
public string NewUser(string a)
{
return $"New User - {a}";
}

只要查询字符串的模式不同,就可以有n个相同路由。

看下面,所有都是有效的唯一路线-

// /myroute/myaction
[HttpGet]
[Route("myroute/myaction")]
public string DefaultRoute()
{
return "Default";
}
// /myroute/myaction?arg1=1
[HttpGet]
[Route("myroute/myaction")]
public string RouteWithOneParam(string arg1)
{
return $"One Param - {arg1}";
}
// /myroute/myaction?arg1=1&arg2=2
[HttpGet]
[Route("myroute/myaction")]
public string RouteWithTwoParam(string arg1, string arg2)
{
return $"Two Param - {arg1} and {arg2}";
}
// /myroute/myaction/1
[HttpGet]
[Route("myroute/myaction/{arg1}")]
public string AdditionalRouteWithOneParam(string arg1)
{
return $"Additional One Param - {arg1}";
}
// /myroute/myaction/1/2
[HttpGet]
[Route("myroute/myaction/{arg1}/{arg2}")]
public string AdditionalRouteWithTwoParam(string arg1, string arg2)
{
return $"Additional Two Param - {arg1} and {arg2}";
}

您尝试过路由吗?你可以从下面看:https://learn.microsoft.com/en-us/previous-versions/cc668201(v=对140(?重定向自=MSDN

页面中的一些行:ASP.NET路由使您可以使用不必映射到网站中特定文件的URL。因为URL不必映射到文件,所以可以使用描述用户操作的URL,因此用户更容易理解这些URL。

因此,您可以专门添加几个路线,并根据您的要求为每个路线提供不同的控制器

最新更新