![](/img/trans.png)
[英]ASP.NET Core Web API calling other Web API using Client Certificate getting 401
[英]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.