GVKun编程网logo

Flask应用中的自定义路由(flask 自定义命令)

23

在本文中,我们将带你了解Flask应用中的自定义路由在这篇文章中,我们将为您详细介绍Flask应用中的自定义路由的方方面面,并解答flask自定义命令常见的疑惑,同时我们还将给您一些技巧,以帮助您实现

在本文中,我们将带你了解Flask应用中的自定义路由在这篇文章中,我们将为您详细介绍Flask应用中的自定义路由的方方面面,并解答flask 自定义命令常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的ASP.Net WebAPI中的自定义路由处理程序、asp.net-mvc – Asp.Net自定义路由和自定义路由并在控制器之前添加类别、CI 框架中的自定义路由守则、CI 框架中的自定义路由规则

本文目录一览:

Flask应用中的自定义路由(flask 自定义命令)

Flask应用中的自定义路由(flask 自定义命令)

我一直在尝试了解如何生成动态Flask URL。我已经阅读了文档和一些示例,但无法弄清楚为什么此代码不起作用:

path = 'foo'
@app.route('/<path:path>',methods=['POST'])
def index(path=None):
    # do some stuff...
    return flask.render_template('index.html',path=path)

我希望将index.html模板提供给/foo,但事实并非如此。我收到一个构建错误。我想念什么?

如果我使用固定路径(如)/bar,则一切正常。

@app.route('/bar',methods=['POST'])

ASP.Net WebAPI中的自定义路由处理程序

ASP.Net WebAPI中的自定义路由处理程序

我可以成功地注册一个自定义路由处理程序(派生自IRouteHandler)在global.asax.cs内的一个Web API路由ala:
routes.MapHttpRoute(
            name: "DefaultApi",routeTemplate: "{client}/api/1.0/{controller}/{action}/{id}",defaults: new{id = UrlParameter.Optional}
        ).RouteHandler = new SingleActionAPIRouteHandler();

但是,当我调用HttpConfiguration.Routes.MapRoute我无法在返回的IHttpRoute上设置一个处理程序时,我试图在内存主机中设置API进行集成测试时似乎找不到一种方法.

我应该做的不同(例如通过使用自定义HttpControllerSelector)?我显然希望在这两种情况下都这样做.

谢谢,
马特

编辑:

所以我最后做的是基本上遵循下面的建议,但只是覆盖HttpControllerdispatcher类,如下所示:

public class CustomHttpControllerdispatcher : HttpControllerdispatcher
{
    public CustomHttpControllerdispatcher(HttpConfiguration configuration) : base(configuration)
    {
    }
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,CancellationToken cancellationToken)
    {
        // My stuff here

        return base.SendAsync(request,cancellationToken);
    }
}

解决方法

你是对的自主主机返回IHttpRoute,并将HttpMessageHandler作为参数.似乎没有内置的路由处理程序的特定方式.

更新:更清楚一点

你应该几乎肯定会使用HttpControllerSelector并实现一个自定义的…一个例子是. http://netmvc.blogspot.co.uk/

以下是一些实验,如果HttpControllerSelector不足以满足您的要求,什么原因…

但是,正如你可以看到MapHttpRoute对HttpMessageHandler有一个重载,所以你可以试试这个… if the handler is NULL then it defaults to IHttpController,但你可以实现自己的,并使用它来指导正确的控制器… MVC框架似乎使用[HttpControllerdispatcher ] here,所以借用一些代码,你可以在这里放置自己的控制器/路由选择代码 – 你可以访问路由和选择器,并可以自己交换它.

这个CustomHttpControllerdispatcher代码仅用于DEMO …查找该行

//DO SOMETHING CUSTOM HERE TO PICK YOUR CONTROLLER

也许有一个玩…

示例路线:

config.Routes.MapHttpRoute(
            name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional },constraints: null,handler: new CustomHttpControllerdispatcher(config)
        );

示例CustomHttpControllerdispatcher:

public class CustomHttpControllerdispatcher : HttpMessageHandler
{
        private IHttpControllerSelector _controllerSelector;
        private readonly HttpConfiguration _configuration;

        public CustomHttpControllerdispatcher(HttpConfiguration configuration)
        {
            _configuration = configuration;
        }

        public HttpConfiguration Configuration
        {
            get { return _configuration; }
        }

        private IHttpControllerSelector ControllerSelector
        {
            get
            {
                if (_controllerSelector == null)
                {
                    _controllerSelector = _configuration.Services.GetHttpControllerSelector();
                }
                return _controllerSelector;
            }
        }

        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,CancellationToken cancellationToken)
        {
                return SendAsyncInternal(request,cancellationToken);
        }

        private Task<HttpResponseMessage> SendAsyncInternal(HttpRequestMessage request,CancellationToken cancellationToken)
        {

            IHttpRouteData routeData = request.GetRouteData();
            Contract.Assert(routeData != null);

            //DO SOMETHING CUSTOM HERE TO PICK YOUR CONTROLLER
            HttpControllerDescriptor httpControllerDescriptor = ControllerSelector.SelectController(request);
            IHttpController httpController = httpControllerDescriptor.CreateController(request);

            // Create context
            HttpControllerContext controllerContext = new HttpControllerContext(_configuration,routeData,request);
            controllerContext.Controller = httpController;
            controllerContext.ControllerDescriptor = httpControllerDescriptor;

            return httpController.ExecuteAsync(controllerContext,cancellationToken);
        }
}

asp.net-mvc – Asp.Net自定义路由和自定义路由并在控制器之前添加类别

asp.net-mvc – Asp.Net自定义路由和自定义路由并在控制器之前添加类别

我只是在学习MVC,并想在我的网站上添加一些自定义路由.

我的网站被拆分为品牌,因此在访问网站的其他部分之前,用户将选择一个品牌.我没有将所选品牌存储在某个地方或将其作为参数传递,而是希望将其作为URL的一部分,以便例如访问NewsControllers索引操作而不是“mysite.com/news”我想使用“mysite.com” /品牌/新闻/”.

我真的想添加一条路线,上面写着一个URL是否有品牌,正常进入控制器/动作并通过品牌……这可能吗?

谢谢

C

解决方法

是的,这是可能的.首先,您必须创建RouteConstraint以确保已选择品牌.如果尚未选择品牌,则此路线应该失败,并且应该跟随到重定向到品牌选择器的操作的路线. RouteConstraint应如下所示:
using System; 
using System.Web;  
using System.Web.Routing;  
namespace Examples.Extensions 
{ 
    public class MustBeBrand : IRouteConstraint 
    { 
        public bool Match(HttpContextBase httpContext,Route route,string parameterName,RouteValueDictionary values,RouteDirection routeDirection) 
        { 
            // return true if this is a valid brand
            var _db = new BrandDbContext();
            return _db.Brands.FirstOrDefault(x => x.BrandName.ToLowerInvariant() == 
                values[parameterName].ToString().ToLowerInvariant()) != null; 
        } 
    } 
}

然后,按如下方式定义您的路线(假设您的品牌选择器是主页):

routes.MapRoute( 
    "BrandRoute","{controller}/{brand}/{action}/{id}",new { controller = "News",action = "Index",id = UrlParameter.Optional },new { brand = new MustBeBrand() }
); 

routes.MapRoute( 
    "Default","",new { controller = "Selector",action = "Index" }
); 

routes.MapRoute( 
    "NotBrandRoute","{*ignoreThis}",action = "Redirect" }
);

然后,在你的SelectorController中:

public ActionResult Redirect()
{
    return RedirectToAction("Index");
}

public ActionResult Index()
{
    // brand selector action
}

如果您的主页不是品牌选择器,或者网站上有其他非品牌内容,则此路由不正确.您将需要BrandRoute和Default之间的其他路线,这些路线与您的其他内容的路线相匹配.

CI 框架中的自定义路由守则

CI 框架中的自定义路由守则

CI 框架中的自定义路由规则

在 ci 框架中,一个 url 和它对应的控制器中的类以及类中的方法是一一对应的,如:

www.test.com/user/info/zhaoyingnan
登录后复制

其中 user 对应的就是控制器中的 user 类,而 info 则对应 user 类中的 info 方法,zhaoyingnan 则是传递的参数


 

如果我不想 用 www.test.com/user/info/zhaoyingnan 这个 URL,

而是改成 www.test.com/member/zhaoyingnan,

此时就需要一个自定义的路由规则,

当 URL 地址为 www.test.com/member/zhaoyingnan 的时候,实际请求的应该是 www.test.com/user/info/zhaoyingnan

在这里,我推荐使用的实则表达式,其他方法不提:

  1. 首先找到配置路由规则的文件

application/config/routes.php

  2.添加如下操作

<span>/*</span><span>* * @author  zhaoyingnan * 自定义路由规则 *</span><span>*/</span><span>$route</span>[''member/(\w+)/?$''] =   ''user/info/$1'';
登录后复制

 

CI 框架中的自定义路由规则

CI 框架中的自定义路由规则

在 ci 框架中,一个 url 和它对应的控制器中的类以及类中的方法是一一对应的,如:

www.test.com/user/info/zhaoyingnan
登录后复制

其中 user 对应的就是控制器中的 user 类,而 info 则对应 user 类中的 info 方法,zhaoyingnan 则是传递的参数


如果我不想 用 www.test.com/user/info/zhaoyingnan 这个 URL,

而是改成 www.test.com/member/zhaoyingnan,

此时就需要一个自定义的路由规则,

当 URL 地址为 www.test.com/member/zhaoyingnan 的时候,实际请求的应该是 www.test.com/user/info/zhaoyingnan

在这里,我推荐使用的实则表达式,其他方法不提:

  1. 首先找到配置路由规则的文件

application/config/routes.php

  2.添加如下操作

<span>/*</span><span>*
 * @author  zhaoyingnan
 * 自定义路由规则
 *</span><span>*/</span><span>$route</span>[''member/(\w+)/?$''] =   ''user/info/$1'';
登录后复制

以上就介绍了CI 框架中的自定义路由规则,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

我们今天的关于Flask应用中的自定义路由flask 自定义命令的分享就到这里,谢谢您的阅读,如果想了解更多关于ASP.Net WebAPI中的自定义路由处理程序、asp.net-mvc – Asp.Net自定义路由和自定义路由并在控制器之前添加类别、CI 框架中的自定义路由守则、CI 框架中的自定义路由规则的相关信息,可以在本站进行搜索。

本文标签: