我有一个类似/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。
因此,您可以专门添加几个路线,并根据您的要求为每个路线提供不同的控制器