gpt4 book ai didi

c# - 未找到与请求 URI 匹配的操作

转载 作者:行者123 更新时间:2023-12-02 03:07:42 25 4
gpt4 key购买 nike

我尝试修改我的 API Controller 之一,以允许通过允许将参数之一作为管道分隔字符串传入来创建多个预留。方法和类可以在这里看到:

public class ReservationsController : ApiController
{
public HttpResponseMessage PostReservation(string eRaiderUserName, string SpaceNumbers)
{
char[] delimiter = { '|' };
string[] spaces = SpaceNumbers.Split(delimiter);
bool saved = true;
foreach(string space in spaces)
{
var reservation = new Reservation { eRaiderUserName=eRaiderUserName, SpaceNumber=Convert.ToInt32(space) };
if (true)
{
reservation.Game = db.Games.FirstOrDefault(g => g.ID == AppSettings.CurrentGameID);
db.Reservations.Add(reservation);
db.SaveChanges();

//HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, reservation);
//response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = reservation.ID }));
//return response;
}
else
{
saved = false;
//return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
}

db.SaveChanges();
if (saved)
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = 1 }));
return response;
} else
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
}
}

我有一个表单,其中发布了我认为应该是正确的信息,但我不断收到此错误:

{"$id":"1","Message":"No HTTP resource was found that matches the request URI 'http://localhost:58463/api/Reservations'.","MessageDetail":"No action was found on the controller 'Reservations' that matches the request."}

API 中的(修改后的)save 方法仍然是一个正在进行的工作。但是是什么阻止了它找到 Web API Controller 呢?这是 Firebug 的输出:

enter image description here

最佳答案

正如所指出的,问题在于 POST 操作只能将正文中发布的数据传输到单个对象(出于技术原因)。

这意味着您可以从路由数据、查询字符串和正文中获取数据,但有以下限制:

  • 来自查询字符串或路由数据的数据必须是任意数量的单个值(即它们不能是类)
  • 您只能使用一个带有来自请求正文的数据的操作参数,但这可能是一个复杂的类
  • 您可以对其进行任意组合,即来自正文的单个或复杂参数,以及来自路线数据或查询字符串的任意数量的单个参数。

因此,解决问题的最通用方法(即可以轻松应用于需要传递复杂数据的其他类,甚至比本例更复杂)是:

首先,根据您的情况创建一个具有所有所需数据属性的类:

public class ReservationData
{
public string eRaiderUserName { get; set; }
public string SpaceNumbers { get; set; }
}

其次,使用此类作为操作中接收到的参数的类型:

public HttpResponseMessage PostReservation(ReservationData reservationData)

使用此代码,格式化程序可以将请求正文中的所有数据映射到操作中的单个参数。您可以使用 JSON 或 formdata 格式,如 jQuery 生成的格式。

注意:属性名称必须区分大小写,与发布的参数名称匹配。

关于c# - 未找到与请求 URI 匹配的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769098/

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