在本文中,我们将带你了解Flask应用中的自定义路由在这篇文章中,我们将为您详细介绍Flask应用中的自定义路由的方方面面,并解答flask自定义命令常见的疑惑,同时我们还将给您一些技巧,以帮助您实现
在本文中,我们将带你了解Flask应用中的自定义路由在这篇文章中,我们将为您详细介绍Flask应用中的自定义路由的方方面面,并解答flask 自定义命令常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的ASP.Net WebAPI中的自定义路由处理程序、asp.net-mvc – Asp.Net自定义路由和自定义路由并在控制器之前添加类别、CI 框架中的自定义路由守则、CI 框架中的自定义路由规则。
本文目录一览:- Flask应用中的自定义路由(flask 自定义命令)
- ASP.Net WebAPI中的自定义路由处理程序
- asp.net-mvc – Asp.Net自定义路由和自定义路由并在控制器之前添加类别
- CI 框架中的自定义路由守则
- CI 框架中的自定义路由规则
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中的自定义路由处理程序
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); } }
解决方法
更新:更清楚一点
你应该几乎肯定会使用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自定义路由和自定义路由并在控制器之前添加类别
我的网站被拆分为品牌,因此在访问网站的其他部分之前,用户将选择一个品牌.我没有将所选品牌存储在某个地方或将其作为参数传递,而是希望将其作为URL的一部分,以便例如访问NewsControllers索引操作而不是“mysite.com/news”我想使用“mysite.com” /品牌/新闻/”.
我真的想添加一条路线,上面写着一个URL是否有品牌,正常进入控制器/动作并通过品牌……这可能吗?
谢谢
C
解决方法
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 框架中,一个 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
在这里,我推荐使用的实则表达式,其他方法不提:
- 首先找到配置路由规则的文件
application/config/routes.php
2.添加如下操作
<span>/*</span><span>* * @author zhaoyingnan * 自定义路由规则 *</span><span>*/</span><span>$route</span>[''member/(\w+)/?$''] = ''user/info/$1'';
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
在这里,我推荐使用的实则表达式,其他方法不提:
- 首先找到配置路由规则的文件
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 框架中的自定义路由规则的相关信息,可以在本站进行搜索。
本文标签: