• ASP.NET Core 1:UrlRouting 设置(不包含MVC6的UrlRouting设置)


    0、Program.cs

    using System.IO;
    using Microsoft.AspNetCore.Hosting;
    
    namespace WebApplication1
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                var host = new WebHostBuilder()
                    .UseKestrel()
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .UseIISIntegration()
                    .UseStartup<Startup>()
                    .Build();
    
                host.Run();
            }
        }
    }

    1、project.json

    {
      "userSecretsId": "aspnet-WebApplicationCore1-782de49b-8e7f-46be-82aa-0f48e1d370bc",
      "dependencies": {
        "Microsoft.NETCore.App": {
          "version": "1.0.0",
          "type": "platform"
        },
        "Microsoft.AspNetCore.Diagnostics": "1.0.0",
        "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
        "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
        "Microsoft.Extensions.Logging.Console": "1.0.0",
        "Microsoft.Extensions.Logging.Debug": "1.0.0",
        "Microsoft.AspNetCore.Routing": "1.0.0",
        "Microsoft.AspNetCore.Routing.Abstractions": "1.0.0",
        "Microsoft.Extensions.Configuration.Abstractions": "1.0.0",
        "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
        "Microsoft.Extensions.Configuration.Json": "1.0.0",
        "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
        "Microsoft.AspNetCore.Http.Abstractions": "1.0.0",
        "Microsoft.AspNetCore.StaticFiles": "1.0.0"
      },
    
      "tools": {
        "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
      },
    
      "frameworks": {
        "netcoreapp1.0": {
          "imports": [
            "dotnet5.6",
            "portable-net45+win8"
          ]
        }
      },
    
      "buildOptions": {
        "emitEntryPoint": true,
        "preserveCompilationContext": true
      },
    
      "runtimeOptions": {
        "configProperties": {
          "System.GC.Server": true
        }
      },
    
      "publishOptions": {
        "include": [
          "wwwroot",
          "web.config"
        ]
      },
    
      "scripts": {
        "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
      }
    }

    2、appsettings.json

    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=(localdb)\mssqllocaldb;Database=aspnet-WebApplicationCore1-782de49b-8e7f-46be-82aa-0f48e1d370bc;Trusted_Connection=True;MultipleActiveResultSets=true"
      },
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Debug",
          "System": "Information",
          "Microsoft": "Information"
        }
      }
    }

    3、Startup.cs

    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Routing;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Logging;
    using WebApplication1.Route;
    using Microsoft.Extensions.Configuration;
    using WebApplication1.Extensions;
    using Microsoft.Extensions.FileProviders;
    using Microsoft.AspNetCore.StaticFiles;
    
    namespace WebApplication1
    {
        public class Startup
        {
            public Startup(IHostingEnvironment env)
            {
                IConfigurationBuilder builder = new ConfigurationBuilder()
                    .SetBasePath(env.ContentRootPath)
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
                if (env.IsDevelopment())
                {
                    // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
                    builder.AddUserSecrets();//project.json -> userSecretsId
                }
                builder.AddEnvironmentVariables();
                this.Configuration = builder.Build();
            }
    
            public IConfigurationRoot Configuration { get; private set; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddRouting();
                services.AddDirectoryBrowser();//浏览所有文件
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                //loggerFactory.AddConsole();
                loggerFactory.AddConsole(this.Configuration.GetSection("Logging"));
                loggerFactory.AddConsole(minLevel: LogLevel.Information);
                loggerFactory.AddDebug();
                //app.UseRequestIP();
    
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                    //app.UseBrowserLink();
                }
                else
                {
                    app.UseExceptionHandler("/error");
                }
    
                app.UseStaticFiles();//使用默认文件夹wwwroot
    
                var staticfile = new StaticFileOptions();
                staticfile.FileProvider = new PhysicalFileProvider(@"C:");//指定目录 这里指定C盘,也可以是其它目录
                //你会发现有些文件打开会404,有些又可以打开。那是因为MIME 没有识别出来。
                //我们可以手动设置这些 MIME ,也可以给这些未识别的设置一个默认值。
                staticfile.ServeUnknownFileTypes = true;
                staticfile.DefaultContentType = "application/x-msdownload"; //设置默认  MIME
                var provider = new FileExtensionContentTypeProvider();
                provider.Mappings.Add(".log", "text/plain");//手动设置对应MIME
                staticfile.ContentTypeProvider = provider;
    
                app.UseStaticFiles(staticfile);
    
                var dir = new DirectoryBrowserOptions();
                dir.FileProvider = new PhysicalFileProvider(@"C:");
                app.UseDirectoryBrowser(dir);
                //对于前面的这么多设置,StaticFiles 提供了一种简便的写法。
                app.UseFileServer(new FileServerOptions()
                {
                    FileProvider = new PhysicalFileProvider(@"C:"),
                    EnableDirectoryBrowsing = true
                });
    
                //UrlRouting
                RouteBuilder routeBuilder = new RouteBuilder(app);
    
                //index http://localhost:5994/en
                routeBuilder.DefaultHandler = new IndexPageRouteHandler(this.Configuration, "index");
                routeBuilder.MapRoute("index_culture_", "{culture}/", new RouteValueDictionary { { "culture", "en" } }, new RouteValueDictionary { { "culture", @"w{2}" } });
                app.UseRouter(routeBuilder.Build());
    
                //category http://localhost:5994/en/fashion/wwww-1111/2
                routeBuilder.DefaultHandler = new CategoryPageRouteHandler(this.Configuration, "category");
                routeBuilder.MapRoute("category_", "{culture}/fashion/{leimu}/{pageindex}/", new RouteValueDictionary { { "pageindex", "1" }, { "culture", "en" } }, new RouteValueDictionary { { "leimu", "([\w|-]+)(\d+)" }, { "pageindex", "\d+" }, { "culture", @"w{2}" } });
                app.UseRouter(routeBuilder.Build());
            }
        }
    }

    4、IndexPageRouteHandler.cs

    using System;
    using System.Diagnostics;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Routing;
    using Microsoft.Extensions.Configuration;
    
    namespace WebApplication1.Route
    {
        public class IndexPageRouteHandler : IRouter
        {
            private string _name = null;
            private readonly IConfigurationRoot _configurationRoot;
    
            public IndexPageRouteHandler(IConfigurationRoot configurationRoot, string name)
            {
                this._configurationRoot = configurationRoot;
                this._name = name;
            }
            public VirtualPathData GetVirtualPath(VirtualPathContext context)
            {
                throw new NotImplementedException();
            }
    
            public async Task RouteAsync(RouteContext context)
            {
                if (this._configurationRoot != null)
                {
                    string connectionString = this._configurationRoot.GetConnectionString("DefaultConnection");
                    Debug.WriteLine(connectionString);
                }
    
                var routeValues = string.Join(",", context.RouteData.Values);
                var message = String.Format("{0} Values={1} ", this._name, routeValues);
                await context.HttpContext.Response.WriteAsync(message);
            }
        }
    }

    5、CategoryPageRouteHandler.cs

    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Routing;
    using Microsoft.Extensions.Configuration;
    using System;
    using System.Diagnostics;
    using System.Threading.Tasks;
    
    namespace WebApplication1.Route
    {
        public class CategoryPageRouteHandler : IRouter
        {
            private string _name = null;
            private readonly IConfigurationRoot _configurationRoot;
    
            public CategoryPageRouteHandler(IConfigurationRoot configurationRoot, string name)
            {
                this._configurationRoot = configurationRoot;
                this._name = name;
            }
    
            public VirtualPathData GetVirtualPath(VirtualPathContext context)
            {
                throw new NotImplementedException();
            }
    
            public async Task RouteAsync(RouteContext context)
            {
                if (this._configurationRoot != null)
                {
                    string connectionString = this._configurationRoot.GetConnectionString("DefaultConnection");
                    Debug.WriteLine(connectionString);
                }
    
                var routeValues = string.Join("", context.RouteData.Values);
                var message = String.Format("{0} Values={1} ", this._name, routeValues);
                await context.HttpContext.Response.WriteAsync(message);
            }
        }
    }

    6、F5启动调试,

    浏览器输入网址:http://localhost:16924/

    浏览器输入网址:http://localhost:16924/en/fashion/wwww-1111/2

  • 相关阅读:
    linux yum命令实践(二)
    linux的yum命令实践
    svn代码回滚命令
    Java连接mysql示例代码
    精品验证码
    稳定性测试,需要对EPC或DIC任务进行翻倍操作,供后续使用
    读取csv
    设置启动参数:禁用密码保存
    gridview超链接列链接方法 (转贴)
    gridview 跨行 跨列(原创)
  • 原文地址:https://www.cnblogs.com/qiyebao/p/5649199.html
Copyright © 2020-2023  润新知