ASP.NET 5 HTML5 历史

标签 asp.net .net html asp.net-core asp.net-web-api-routing

我正在将我的项目升级到 ASPNET5。我的应用程序是一个使用 HTML5 Url 路由 (HTML5 History API) 的 AngularJS Web 应用程序。

在我以前的应用程序中,我使用了 URL 重写 IIS 模块,代码如下:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="MainRule" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAll">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          <add input="{REQUEST_URI}" matchType="Pattern" pattern="api/(.*)" negate="true" />
          <add input="{REQUEST_URI}" matchType="Pattern" pattern="signalr/(.*)" negate="true" />
        </conditions>
        <action type="Rewrite" url="Default.cshtml" />
      </rule>
    </rules>
  </rewrite>
<system.webServer>

我知道我可以移植它,但我想尽量减少对 Windows 的依赖。根据我的阅读,我认为我应该能够使用 ASP.NET 5 中间件来完成此任务。

我认为代码看起来像这样,但我认为我离得还很远。

app.UseFileServer(new FileServerOptions
{
    EnableDefaultFiles = true,
    EnableDirectoryBrowsing = true
});

app.Use(async (context, next) =>
{
    if (context.Request.Path.HasValue && context.Request.Path.Value.Contains("api"))
    {
        await next();
    }
    else
    {
        var redirect = "http://" + context.Request.Host.Value;// + context.Request.Path.Value;
        context.Response.Redirect(redirect);
    }
});

本质上,我想路由任何包含 /api/signalr 的内容。对在 ASPNET5 中完成此操作的最佳方法有何建议?

最佳答案

您走在正确的轨道上,但我们不想发回重定向,而只是想重写请求中的路径。以下代码从 ASP.NET5 RC1 开始运行。

app.UseIISPlatformHandler();

// This stuff should be routed to angular
var angularRoutes = new[] {"/new", "/detail"};

app.Use(async (context, next) =>
{
    // If the request matches one of those paths, change it.
    // This needs to happen before UseDefaultFiles.
    if (context.Request.Path.HasValue &&
        null !=
        angularRoutes.FirstOrDefault(
        (ar) => context.Request.Path.Value.StartsWith(ar, StringComparison.OrdinalIgnoreCase)))
    {
        context.Request.Path = new PathString("/");
    }

    await next();
});

app.UseDefaultFiles();
app.UseStaticFiles();
app.UseMvc();

这里的一个问题是您必须将角度路由专门编码到中间件中(或将它们放入配置文件等)。

最初,我尝试创建一个管道,其中 UseDefaultFiles() 和 UseStaticFiles() 被调用后,它会检查路径,如果路径不是/api,重写它并发送它返回(因为/api 以外的任何东西都应该已经处理过了)。但是,我永远无法让它发挥作用。

关于ASP.NET 5 HTML5 历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31184446/

相关文章:

javascript - 如何使用POST方法来实现呢?

c# - DateTime.ToUniversalTime() 如何工作?

html - div背景的响应式设计问题

java - 有人编写过模糊日期匹配来捕获数据输入错误吗?

html - 赋予多个字体家族名称的意义是什么

iphone - 在应用程序(全屏)模式下使用 iPhone HTML5 进行 Azure 移动 Facebook 身份验证

asp.net - 对于如何使用 VB.NET 在 ASP.NET 中创建按钮单击事件,为什么选择私有(private)与 protected ?

Asp.net 部署(Web 安装程序)

asp.net - 如何将 onchange 事件附加到 CheckBoxList?缺少输入属性?

c# - 如何在格式字符串中使用与语言环境无关的小数点和数字分隔符?