【问题标题】:.net core IActionResult return OK().net 核心 IActionResult 返回 OK()
【发布时间】:2017-07-09 02:11:14
【问题描述】:

我已经跟随下一个例子 Link to source

当我创建我的控制器(应该与他的 TripsController 相同)以返回 Ok 的数据时,浏览器不会解析为 HTML,它仅在浏览器中显示 json 格式。

using System;
using System.Collections.Generic;
using AutoMapper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using RnD.Models.Repository;
using RnD.Models.ViewModels;

namespace RnD.Controllers.Web
{

    [Route("/machines")]
    [Authorize]
    public class MachineTypeController : Controller
    {
        private ILogger<MachineTypeController> _logger;
        private IMachineTypeRepository _repository;

        public MachineTypeController(IMachineTypeRepository repository, ILogger<MachineTypeController> logger)
        {
            _logger = logger;
            _repository = repository;
        }

        [HttpGet("")]
        public IActionResult Index()
        {
            try
            {
                var results = _repository.GetAllMachineTypes();

                return Ok(Mapper.Map<IEnumerable<MachineTypeViewModel>>(results));
            }
            catch (Exception ex)
            {
                _logger.LogError($"Failed to get all Machine types: {ex}");
                return BadRequest("Error Occurred");
            }

        }
    }
}

如果我把返回视图它会正常工作。

这里是 Startup.cs

using System.Threading.Tasks;
using AutoMapper;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Serialization;
using RnD.Models.DataFixtures;
using RnD.Models.Entity;
using RnD.Models.Repository;
using RnD.Models.ViewModels;

namespace RnD
{
    public class Startup
    {
        private IHostingEnvironment _env;
        private IConfigurationRoot _config;

        public Startup(IHostingEnvironment env)
        {
            _env = env;

            var builder = new ConfigurationBuilder()
                .SetBasePath(_env.ContentRootPath)
                .AddJsonFile("config.json")
                .AddEnvironmentVariables();

            _config = builder.Build();
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton(_config);

            services.AddDbContext<RnDContext>();

            services.AddIdentity<ApplicationUser, IdentityRole>(config =>
            {
                config.User.RequireUniqueEmail = false;
                config.Password.RequireDigit = false;
                config.Password.RequireUppercase = false;
                config.Password.RequiredLength = 8;
                config.Cookies.ApplicationCookie.LoginPath = "/auth/login";
                config.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents()
                {
                    OnRedirectToLogin = async ctx =>
                    {
                        if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200)
                        {
                            ctx.Response.StatusCode = 401;
                        }
                        else
                        {
                            ctx.Response.Redirect(ctx.RedirectUri);
                        }
                        await Task.Yield();

                    }
                };
            }).AddEntityFrameworkStores<RnDContext>();

            services.AddScoped<IMachineTypeRepository, MachineTypeRepository>();

            services.AddTransient<RnDContextSeedData>();

            services.AddLogging();

            services.AddMvc(config =>
            {
                if (_env.IsProduction())
                {
                    config.Filters.Add(new RequireHttpsAttribute());
                }
            })
            .AddJsonOptions(config =>
            {
                config.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
            });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app,
            IHostingEnvironment env,
            RnDContextSeedData seeder,
            ILoggerFactory loggerFactory

            )
        {

            Mapper.Initialize(config =>
            {
                config.CreateMap<MachineTypeViewModel, MachineType>().ReverseMap();
            });
            loggerFactory.AddConsole();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                loggerFactory.AddDebug(LogLevel.Information);
            }
            else
            {
                loggerFactory.AddDebug(LogLevel.Error);
            }
            app.UseStaticFiles();
            app.UseIdentity();
            app.UseMvc(config =>
            {
                config.MapRoute(
                  name: "Default",
                  template: "{controller}/{action}/{id?}",
                  defaults: new { controller = "Home", action = "Index" }
                  );
            });

            seeder.EnsureSeedData().Wait();
        }
    }
}

这是来自 Angular 的代码

app.js

// app.js
(function () {
    "use strict";

    angular.module("app",[]);
})();

machineController.js

// machineController.js
(function () {
    "use strict";

    angular.module("app")
        .controller("machineController", machineController);



    function machineController($http) {
        /* jshint validthis:true */
        var vm = this;

        vm.machines = [];

        vm.errorMessage = "";

        $http.get("/machines")
            .then(function (response) {
                // Success
                angular.copy(response.data, vm.machines);
            }, function (error) {
                // Failure
                vm.errorMessage = "Failed: " + error;
            });

    }
})();

索引.cshtml

@model IEnumerable<RnD.Models.Entity.MachineType>
@{
    ViewBag.Title = "Machine Type List";
}

@section scripts{

    <script src="~/lib/angular/angular.js"></script>
    <script src="~/js/app.js"></script>
    <script src="~/js/machineController.js"></script>
}
<div class="row" ng-app="app">
    <div ng-controller="machineController as vm" class="col-md-6 col-md-offset-6">
        <table class="table table-responsive">
            <tr ng-repeat="machine in vm.machines">
                <td>{{machine.name}}</td>
            </tr>
        </table>
    </div>
</div>

【问题讨论】:

    标签: c# asp.net-core .net-core


    【解决方案1】:

    我发现了问题所在。

    1. 在控制器中我添加了一个方法

      [HttpGet("GetMachines")]
      public IActionResult GetMachines()
      {
          try
          {
              var results = _repository.GetAllMachineTypes();
      
              return Ok(Mapper.Map<IEnumerable<MachineTypeViewModel>>(results));
          }
          catch (Exception ex)
          {
              _logger.LogError($"Failed to get all Machine types: {ex}");
              return BadRequest("Error Occurred");
          }
      }
      
    2. 第二次我改变了 machineController.js

      (function () {
      "use strict";
      
      angular.module("app")
          .controller("machineController", machineController);
      
      
      
      function machineController($http) {
          /* jshint validthis:true */
          var vm = this;
      
          vm.machines = [];
      
          vm.errorMessage = "";
      
          $http.get("/machines/GetMachines")
              .then(function (response) {
                  // Success
                  angular.copy(response.data, vm.machines);
              }, function (error) {
                  // Failure
                  vm.errorMessage = "Failed: " + error;
              });
      
      }
       })();
      

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 2020-01-13
      • 1970-01-01
      相关资源
      最近更新 更多