gpt4 book ai didi

c# - .net 核心 IActionResult 返回 OK()

转载 作者:行者123 更新时间:2023-11-30 23:11:07 25 4
gpt4 key购买 nike

我已经按照下一个例子 Link to source

当我创建我的 Controller (应该与他的 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");
}

}
}
}

如果我返回 View ,它将正常工作。

这是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的代码

应用程序.js

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

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

机器 Controller .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>

最佳答案

我找到了问题所在。

  1. 在 Controller 中我添加了一个方法

    [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;
    });

    }
    })();

关于c# - .net 核心 IActionResult 返回 OK(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44949170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com