【问题标题】:How to add MVC to existing web API project如何将 MVC 添加到现有的 Web API 项目
【发布时间】:2016-07-12 21:54:53
【问题描述】:

目前我有一个 web api 项目,我想添加一个可以创建用户和修改权限的管理页面,但是似乎几乎没有关于如何将 MVC 添加到现有 web api 项目的文档。

【问题讨论】:

  • 什么版本的 mvc/web api ?
  • 如何创建一个单独的 MVC 项目来使用 webapi 项目端点?这将强制完全分离关注点
  • 对于Core MVC,你只需要Nuget "Install-Package Microsoft.AspNet.Mvc" 或者新建一个Web APi和MVC项目,搞清楚Refrence的区别。

标签: asp.net-mvc asp.net-web-api


【解决方案1】:

对于使用 .Net Core 3 的任何人,请使用此模板配置您的 Startup.cs

注意,我已经注释掉了现有的 Web Api 代码。

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        //services.AddControllers();
        services.AddControllersWithViews();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            //endpoints.MapControllers();
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");             
        });
    }
}

【讨论】:

    【解决方案2】:

    .Netcore 2.1 项目更新

    1. 通过 NuGet 安装 Microsoft.AspNetCore.Mvc
    2. 创建 Views 文件夹(您的现有 API 项目中已经有 controller 文件夹)
    3. 修改Startup.cs中的ConfigureServices方法并添加这一行:

      services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
      
    4. 修改Startup.cs中的Configure方法并添加默认地图路由:

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

    【讨论】:

      【解决方案3】:

      我在使用 WebApi 而不是 MVC 的项目中遇到了类似的问题,后来使用以下方法添加 MVC:

      • 我使用 nugget 将 Microsoft.AspNet.Mvc 和 Microsoft.AspNet.Web.Optimization 添加到项目中
      • 我在 App_Start 文件夹中添加了一个 RouteConfig 文件(由 MVC 模板创建),并在 Global.asax.cs 类中执行了 RegisterRoutes 方法,再次对应于一个新的 MVC 项目。这允许控制器被调用。
      • 我添加了我的控制器 (Home) 和一个新视图 (Index.cshtml)。添加视图创建了 Shared/_Layout.cshtml 以及 _ViewStart.cshtml 文件

      在我启动项目后,我收到以下错误消息:

      视图必须派生自 WebViewPage,或 WebViewPage

      • 在研究了这个问题后,我在msdn 上找到了一篇描述解决方案的文章。 缺少的组件是 Views 文件夹中的 Web.config 文件。同样,您可以从现有 MVC 项目中复制文件
      • 在 Web.config 文件中,我必须从 System.web.webPages.razor 部分中删除旧项目的默认命名空间,并将其替换为我自己的默认命名空间

      这样我就可以使用标准的 MVC 控制器了。

      【讨论】:

      • 完美答案!
      【解决方案4】:

      我在使用 WebApi 而不是 MVC 的项目中遇到了类似的问题,后来使用以下方法添加 MVC:

      1. ConfigureServices中添加services.AddControllersWithViews();

      2. 并在Configure Like

        中定义MVC Routing
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-11
        • 2012-08-12
        • 2020-11-04
        • 2014-11-21
        • 2015-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多