如何在asp.net C#中为某些控制器操作设置默认路由?

杰瑟布

我如何限制某些不使用的路线。

在我的startup.cs中,我有两个mapendpoint

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "botConfiguration",
                    pattern: "bot/{botID}/{controller=Home}/{action=Index}/{id?}"); 

                endpoints.MapControllerRoute(
                     name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });

在我的控制器中

        public IActionResult Setting(int botID)
        {

            //botConfigRepository.GetAll();
            return View();
        }

我想说的是,如果我的路线中未定义botID,那么您将无法调用此操作,否则它将重定向到某种形式的主页。

现在我知道我可以

if (botID == 0 ){
   return RedirectToAction("Index");
}

某种意义上,但为每一个动作写这个听起来很痛苦。

漏水的

当然,ASP.NET Core支持多种实现跨领域关注点的方法。取决于您想要的程度,但是可以像添加自定义中间件委托一样简单,如下所示:

// In Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Placed before app.UseEndpoints()
    app.Use(async (ctx, next) => {
        if (!ctx.Request.Query.ContainsKey("botID") && !ctx.Request.Path.Value.Contains("Index"))
            ctx.Response.Redirect("Index");
        else
            await next();
    });
}

(存在第二个条件只是为了防止级联重定向。)

中间件基本上是请求处理管道中最顶层的组成部分,本质上是一个责任链结构,每个中间件都可以通过它进行控制或短路。ASP.NET自己的组件被实现为中间件,例如授权中间件和路由中间件。这些添加到内部Startup.cs/Configure()的顺序决定了它们的执行顺序。

因此,如果您想获得相对较低的水平,最干净的方法通常是使用中间件。您还可以添加适当的中间件类app.UseMiddleware()

(您应该注意的一件事是中间件的寿命是单身,因此将请求范围的服务注入其中是有问题的。请参阅此问题。)

作为替代解决方案,您可以使用全局注册的方法ActionFilter来达到相同的结果,就像有人评论的那样:

public class MyActionFilter : IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext context) {}

    public void OnActionExecuting(ActionExecutingContext ctx)
    {
        if (!ctx.HttpContext.Request.Query.ContainsKey("botID") && !ctx.HttpContext.Request.Path.Value.Contains("Index"))
        {
            ctx.Result = new RedirectResult("Index");
        }
    }
}

// Register it in Startup.ConfigureServices()
services.AddMvc(options => options.Filters.Add(new MyActionFilter()));

如果您有其他要求,请随时发表评论,我可以尝试解决。:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在asp.net C#中为某些控制器操作设置默认路由?

来自分类Dev

如何在控制器ASP.NET MVC 5上禁用默认路由

来自分类Dev

如何在ASP.NET Core Web API中将新控制器设置为默认控制器

来自分类Dev

路由如何与 asp.net mvc 中的默认控制器和操作一起使用

来自分类Dev

我如何配置ASP.NET Core路由以路由到控制器(没有可选动作)(如果存在),然后回退到默认路由?

来自分类Dev

如何在ASP.NET MVC中的控制器中为特定用户提供操作方法的访问权限

来自分类Dev

如何在ASP Net Core 3.1控制器中针对特定操作设置基本身份验证?

来自分类Dev

ASP.Net MVC如何在控制器操作中从布局访问隐藏字段

来自分类Dev

C# ASP.Net Core:在 url 中显示默认控制器和视图

来自分类Dev

如何在C#中使用ASP.NET MVC中的控制器解决集合错误?

来自分类Dev

如何在Asp.Net(aspx)应用程序C#中添加API控制器(Web API 2)

来自分类Dev

如何在C#ASP.NET MVC3中为特定操作映射路由?

来自分类Dev

如何在ASP.NET MVC中的区域中定义从控制器到操作的操作链接

来自分类Dev

如何在ASP.NET Core中设置默认区域?

来自分类Dev

如何在ASP.NET中设置默认参数

来自分类Dev

如何在ASP.NET MVC中使用routeValue参数调用控制器操作

来自分类Dev

如何在ASP.NET MVC控制器中的创建GET和POST操作中改善DRY

来自分类Dev

如何在控制器操作中引用 Html.TextBoxFor 值(更新 asp.net-mvc 中的表)

来自分类Dev

在ASP.Net Web API中,如何更改特定控制器或操作的默认格式化程序

来自分类Dev

如何在asp.net mvc中的URL中更改控制器名称

来自分类Dev

如何在ASP.NET MVC中的控制器中调用模型方法

来自分类Dev

如何在URL中更改ASP.NET MVC控制器名称?

来自分类Dev

如何在ASP.NET Core控制器中接收“多部分/混合”

来自分类Dev

如何在ASP.NET MVC控制器中获取过帐的表单数据

来自分类Dev

如何在ASP.NET Web API异步控制器方法中返回对象列表

来自分类Dev

如何在ASP.NET MVC控制器中获取URL

来自分类Dev

如何在ASP.NET Core WebApi控制器中获取当前登录的用户

来自分类Dev

如何在ASP.NET MVC控制器中编写HTML代码

来自分类Dev

如何在使用ASP .NET MVC的方法之间正确共享控制器中的对象?

Related 相关文章

  1. 1

    如何在asp.net C#中为某些控制器操作设置默认路由?

  2. 2

    如何在控制器ASP.NET MVC 5上禁用默认路由

  3. 3

    如何在ASP.NET Core Web API中将新控制器设置为默认控制器

  4. 4

    路由如何与 asp.net mvc 中的默认控制器和操作一起使用

  5. 5

    我如何配置ASP.NET Core路由以路由到控制器(没有可选动作)(如果存在),然后回退到默认路由?

  6. 6

    如何在ASP.NET MVC中的控制器中为特定用户提供操作方法的访问权限

  7. 7

    如何在ASP Net Core 3.1控制器中针对特定操作设置基本身份验证?

  8. 8

    ASP.Net MVC如何在控制器操作中从布局访问隐藏字段

  9. 9

    C# ASP.Net Core:在 url 中显示默认控制器和视图

  10. 10

    如何在C#中使用ASP.NET MVC中的控制器解决集合错误?

  11. 11

    如何在Asp.Net(aspx)应用程序C#中添加API控制器(Web API 2)

  12. 12

    如何在C#ASP.NET MVC3中为特定操作映射路由?

  13. 13

    如何在ASP.NET MVC中的区域中定义从控制器到操作的操作链接

  14. 14

    如何在ASP.NET Core中设置默认区域?

  15. 15

    如何在ASP.NET中设置默认参数

  16. 16

    如何在ASP.NET MVC中使用routeValue参数调用控制器操作

  17. 17

    如何在ASP.NET MVC控制器中的创建GET和POST操作中改善DRY

  18. 18

    如何在控制器操作中引用 Html.TextBoxFor 值(更新 asp.net-mvc 中的表)

  19. 19

    在ASP.Net Web API中,如何更改特定控制器或操作的默认格式化程序

  20. 20

    如何在asp.net mvc中的URL中更改控制器名称

  21. 21

    如何在ASP.NET MVC中的控制器中调用模型方法

  22. 22

    如何在URL中更改ASP.NET MVC控制器名称?

  23. 23

    如何在ASP.NET Core控制器中接收“多部分/混合”

  24. 24

    如何在ASP.NET MVC控制器中获取过帐的表单数据

  25. 25

    如何在ASP.NET Web API异步控制器方法中返回对象列表

  26. 26

    如何在ASP.NET MVC控制器中获取URL

  27. 27

    如何在ASP.NET Core WebApi控制器中获取当前登录的用户

  28. 28

    如何在ASP.NET MVC控制器中编写HTML代码

  29. 29

    如何在使用ASP .NET MVC的方法之间正确共享控制器中的对象?

热门标签

归档