我的页面上有一个简单的GET表单,带有一个参数(让我们说query
)。如果我提交表单,它会将我重定向到/Controller/Action?query=value
。我想重定向到/Controller/Action/value
。
我该如何实现? URL重写机制?有路由配置吗?
答案 0 :(得分:1)
您可以使用URL重定向来实现这一点。尝试参考下面的演示:
1。创建一个RewriteRules
类
public class RewriteRules
{
public static void RedirectRequests(RewriteContext context)
{
var request = context.HttpContext.Request;
if (request.Query["SearchString"].ToString() != "")
{
var xx = $"{context.HttpContext.Request.Path.Value}/{request.Query["SearchString"].ToString()}";
context.HttpContext.Response.Redirect ($"{context.HttpContext.Request.Path.Value}/{request.Query["SearchString"].ToString()}");
}
}
}
2。在startup.cs中将其配置为中间件
app.UseRewriter(new RewriteOptions()
.Add(RewriteRules.RedirectRequests)
);
3。我的观点:
<form asp-controller="Home" asp-action="TestUrl" method="get">
<p>
Title: <input type="text" name="SearchString">
<input type="submit" value="Filter" />
</p>
</form>
4。我的动作:
[HttpGet("Home/TestUrl/{searchString?}")]
public async Task<IActionResult> TestUrl(string searchString)
{
return Json(searchString);
}
发送/Home/TestUrl?searchString=hello
时,它将重定向到/Home/TestUrl/hello
并返回“ hello”。
答案 1 :(得分:0)
我建议您使用javascript的Get请求来处理此问题,您可以在其中处理URL格式以使Get达到所需的操作方法。默认情况下,getform的绑定将参数作为URL上查询字符串的一部分传递。 在提交数据之前,如果要将参数传递到正确的url,请从表单获取数据并通过Ajax发出Get请求。
答案 2 :(得分:0)
我认为您正在寻找WebApi路由配置。如果我的猜测是正确的,那么您需要在App_start文件夹中的WebApi.config文件中编写它。
config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
config.Routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}");
config.Routes.MapHttpRoute("DefaultApiGet", "Api/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
config.Routes.MapHttpRoute("DefaultApiPost", "Api/{controller}", new { action = "Post" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) });
因此,根据路由请求,它将映射到相应的路由方向,并根据请求将您带到特定的控制器和操作方法。
答案 3 :(得分:0)
您只需要在路由模板中包含参数,它将为您完成此操作。给定这个示例控制器:
(2, 3)
* |
(5, 3)
||
(10,3)
您可以用[Route("[controller]")]
public class TestController : Controller
{
[HttpGet("something/{value}")]
// -------^^^^^^^^^^^^^^^^^ is the route template.
public IActionResult Something(string value)
{
return View();
}
}
呼叫Something
,而/test/something/5
将是value
。