在我的页面上有一个简单的GET-form,只有一个参数(假设是query
)。如果我提交表单,它会将我重定向到/Controller/Action?query=value
。我想被重定向到/Controller/Action/value
。
我怎样才能做到这一点呢?URL重写机制?路由配置有什么问题吗?
发布于 2019-05-09 07:53:26
你可以使用URL Redirect来实现that.Try,参考我下面的演示:
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“。
发布于 2019-05-06 10:20:37
我建议您使用来自javascript的Get请求来处理此问题,您可以处理URL格式以获取所需的操作方法。默认情况下,getform的绑定将参数作为URL上查询字符串的一部分进行传递。在提交数据之前,从表单中获取数据,如果希望将参数传递给正确的url,可以通过Ajax发出get请求。
发布于 2019-05-06 10:22:29
我认为您正在寻找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) });
因此,基于路由请求,它将映射到相应的路由方向,并根据请求将您带到特定的控制器和操作方法。
https://stackoverflow.com/questions/56002704
复制