繁体   English   中英

ASP.NET 核心 Web API。使用 NSwag 生成的客户端未命中 PUT 端点

[英]ASP.NET Core Web API. The PUT endpoint is not getting hit using NSwag generated client

于是开始学习Web API 遇到了PUT方法的问题。 当我使用在 NSwag 的帮助下生成的客户端时,PUT 端点根本没有受到攻击。 我正在使用 .NET 6。这是 controller:

using JournalEditService.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace JournalEditService.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class LessonEditController : ControllerBase
    {
        private readonly SchoolJournalContext _db;

        public LessonEditController(SchoolJournalContext db) 
        {
            _db = db;
        }

        [HttpGet("GetLessonByJournalAndDate/{fkJournal}/{date}")]
        public Lesson GetLessonByJournalAndDate(int fkJournal, DateTime date) 
        {
            return _db.Lessons.First(x => x.FkJournal == fkJournal && x.Date == date);
        }

        [HttpPut("UpdateLesson/{lesson}")]
        [ProducesResponseType(StatusCodes.Status204NoContent)]
        public IActionResult UpdateLesson(Lesson lesson) 
        {
            if (lesson.Homework == null) 
            {
                lesson.Homework = "";
            }
            if(lesson.Theme == null) 
            {
                lesson.Theme = "";
            }
            _db.Lessons.Update(lesson);
            _db.SaveChanges();
            return NoContent();
        }
        

    }
}

课程.cs

using System;
using System.Collections.Generic;

namespace JournalEditService.Models;

public partial class Lesson
{
    public int Id { get; set; }

    public int FkJournal { get; set; }

    public int FkLessonTime { get; set; }

    public DateTime Date { get; set; }

    public string Theme { get; set; } = null!;

    public string Homework { get; set; } = null!;

    public virtual Journal FkJournalNavigation { get; set; } = null!;

    public virtual LessonTime FkLessonTimeNavigation { get; set; } = null!;

    public virtual ICollection<Progress> Progresses { get; } = new List<Progress>();
}

和来自另一个项目的 Program.cs 文件,它使用 API

using JournalEditService.Models;
using Services;
using Microsoft.EntityFrameworkCore;
using System.Text.Json;

var httpClient = new HttpClient();
var client = new Client("https://localhost:7051", httpClient);

Lesson lesson;
using(SchoolJournalContext db = new SchoolJournalContext()) 
{
    lesson = db.Lessons.First(x => x.Id == 2);
}
lesson.Homework = "Some homework";
string json = JsonSerializer.Serialize(lesson);
var response = client.UpdateLessonAsync(json, lesson);
bool check = response.IsCompleted;

生成的客户端太大,无法在此处发布)

我想仅此而已。 如果您需要一些其他信息,请告诉我,感谢您的帮助。

让这个问题更加奇怪的是,我在 Swagger UI 中测试了该端点并且它工作得很好,只有当我尝试使用客户端使用 API 时才会出现问题(GET 方法工作正常,问题仅存在于 PUT 和 POST 方法) .

固定它。 显然问题出在[HttpPut("UpdateLesson/{lesson}")]部分。 像这样编辑它[HttpPut("UpdateLesson")]并且它工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM