首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在GET-form提交后将查询参数映射到路由参数

如何在GET-form提交后将查询参数映射到路由参数
EN

Stack Overflow用户
提问于 2019-05-06 17:48:45
回答 4查看 905关注 0票数 0

在我的页面上有一个简单的GET-form,只有一个参数(假设是query)。如果我提交表单,它会将我重定向到/Controller/Action?query=value。我想被重定向到/Controller/Action/value

我怎样才能做到这一点呢?URL重写机制?路由配置有什么问题吗?

EN

回答 4

Stack Overflow用户

发布于 2019-05-09 15:53:26

你可以使用URL Redirect来实现that.Try,参考我下面的演示:

1.创建RewriteRules

代码语言:javascript
代码运行次数:0
运行
复制
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中将其配置为中间件

代码语言:javascript
代码运行次数:0
运行
复制
app.UseRewriter(new RewriteOptions()
            .Add(RewriteRules.RedirectRequests)
            );

3.我的观点:

代码语言:javascript
代码运行次数:0
运行
复制
<form asp-controller="Home" asp-action="TestUrl" method="get">
<p>
    Title: <input type="text" name="SearchString">
    <input type="submit" value="Filter" />
</p>
</form>

4.我的操作:

代码语言:javascript
代码运行次数:0
运行
复制
[HttpGet("Home/TestUrl/{searchString?}")]
public async Task<IActionResult> TestUrl(string searchString)
    {
        return Json(searchString);
    }

当您发送/Home/TestUrl?searchString=hello时,它会重定向到/Home/TestUrl/hello并返回"hello“。

票数 1
EN

Stack Overflow用户

发布于 2019-05-06 18:20:37

我建议您使用来自javascript的Get请求来处理此问题,您可以处理URL格式以获取所需的操作方法。默认情况下,getform的绑定将参数作为URL上查询字符串的一部分进行传递。在提交数据之前,从表单中获取数据,如果希望将参数传递给正确的url,可以通过Ajax发出get请求。

票数 0
EN

Stack Overflow用户

发布于 2019-05-06 18:22:29

我认为您正在寻找WebApi路由配置。如果我的猜测是正确的,那么您需要将此代码写入App_start文件夹中的WebApi.config文件中。

代码语言:javascript
代码运行次数:0
运行
复制
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) });

因此,基于路由请求,它将映射到相应的路由方向,并根据请求将您带到特定的控制器和操作方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56002704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档