【问题标题】:ASP.NET MVC + Web API running along: get routesASP.NET MVC + Web API 一起运行:获取路由
【发布时间】:2017-03-04 01:20:14
【问题描述】:

我有一个 Visual Studio 2015 解决方案,其中包含一个 ASP.NET Core Web API 和一个 ASP.NET Core MVC 应用程序。

我打算在 MVC 应用程序中使用 API,它们同时运行。

例如,API 在localhost:60170 上运行,我有一个控制器路由到"api/[controller]",如下所示:

namespace JobManager.WAPI.Controllers
{
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {

现在,我如何在我的 MVC 应用程序中将路由获取到 API,而不用硬编码 API 的路径,即localhost:60170

【问题讨论】:

  • 你可以使用Hyprlinkr
  • 没有 ASP.NET Core Web Api 这样的东西。 MVC 和 Web Api 已在 Core 中合并。
  • @NightOwl888:不要认为这会在这里奏效。问题似乎是用户创建了两个单独的项目,现在想在它们之间共享路由。
  • @ChrisPratt 是的,就是这样!
  • @manatttta:您不能在项目之间共享路由。如果您的网站和 API 作为单独的应用程序托管,那么对 API 路径进行硬编码是不可避免的。您可以通过使用诸如应用程序设置之类的东西来存储您需要的端点的 URL 来减轻一些损害,因为您只需在一个地方对其进行硬编码,但必须对其进行硬编码。

标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc


【解决方案1】:

您的控制器可以同时拥有 API 方法和 MVC 方法“手拉手”。

你可以先在Startup.cs中定义你的默认MVC路由:

        // mvc
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

在控制器类中,去掉控制器属性[Route("api/[controller]")],改用它来装饰控制器类内部的具体API方法,例如:

[Route("api/[controller]/XYZ/{..}")]

public IActionResult ABC(..){

}

对于 MVC 方法,照常使用即可:

[HttpGet]

public async Task<IActionResult> Index(..){

}

不要对localhost 地址进行硬编码。

【讨论】:

  • 我想我不明白。至少在我不提及 API 端口的情况下,它如何访问 API 方法?
  • 对不起,我误解了意图。我的解决方案允许您拥有一个项目来处理 API 服务和 MVC Web 前端部分。
猜你喜欢
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
相关资源
最近更新 更多