【发布时间】:2021-03-10 21:39:40
【问题描述】:
新信息:
在尝试操纵 URL 后,我几乎可以正常工作,但并不完全正常。然后我发现如果我的主页 url 是 \localhost\ABIAdmin\Home,它无需任何编码更改即可工作。但它以\localhost\ABIAdmin 开头,我的_Layout 中有链接可将我带到那里,它也以\localhost\ABIAdmin 的形式出现(没有\Home)。要求我们的用户提供包含 home 的完整 url 很容易,但我需要链接来提供 \Home 。这是主页链接的 html:
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Dashboard</a>
所以现在的问题是我如何从链接中获取 url 中的 \Home,如果可能的话,如何在启动时获取?这可以通过 IIS 或通过我的端点解决吗?
我有一个带有 Razor Pages 的 ASP.NET Core 3.1 MVC 应用程序,如果我不使用默认网站,或者如果我将应用程序作为 exe 运行,当我将它部署到 IIS 时,它可以正常工作。我所有的导航都有效,我所有的 CRUD 操作都有效(我使用的是 Syncfusion 的 DataGrid)。但是,如果我部署到默认网站,我会遇到似乎是路由问题。请注意以下几点:
我在 c:\inetpub\wwwroot 下添加了一个名为 ABIAdmin 的文件夹,其中包含我的核心应用程序。
Startup/ConfigureServices 中的相关代码:services.AddControllersWithViews();
启动/配置中的相关代码:
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseCookiePolicy();
app.UseSession();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "Privacy",
pattern: "{controller=Privacy}/{action=Privacy}/{id?}");
});
我有大约 80 个控制器,不包括隐私和家庭控制器。任何控制器中都没有路由信息。
我尝试过添加虚拟目录,但没有帮助。
当我从隐私页面导航到活动页面时,它会形成一个正确的 URL,例如 http://localhost:5000/ABIAdmin/Campaigns,其中 ABIAdmin 是默认网站下的站点名称。但是,如果我从主页导航,我会收到 404 错误。请求的 URL 格式为 http://localhost:5000/Campaigns,但缺少“/ABIAdmin”,物理路径也错误:C:\inetpub\wwwroot\Campaigns。当我从隐私页面成功导航时,会检索数据,但如果我尝试执行添加/更新/删除操作,它就会挂起。我相信这是因为网格形成的任何 URL 都是错误的。我不认为这是 Syncfusion 网格的错。
所以问题是,为什么在这种情况下默认网站的行为与独立网站不同?我们将把它部署给多个客户,有些客户希望在默认网站下使用它。
任何帮助将不胜感激。 :)
【问题讨论】:
-
“其中ABIAdmin是Default Web Site下的站点名称”单独表示需要阅读docs.microsoft.com/en-us/iis/get-started/…IIS上的站点下没有站点。
-
谢谢 Lex,我用错了术语。你能说这是我的第一个网站吗? :)
标签: asp.net-mvc iis url-routing asp.net-core-3.1 syncfusion