为什么我在调用 Web 服务函数时收到错误
本文关键字:错误 函数 服务 调用 Web 为什么 | 更新日期: 2023-09-27 18:31:56
我正在编写一个 C# Web api 2 网络服务,并希望得到一些帮助,以便从请求到 Web 服务获取单个项目。
下面是 Web 服务控制器类代码:
[RoutePrefix("api")]
public class ItemsWebApiController : ApiController
以下是 Web 服务函数:
// GET: api/Getitem/1
[Route("Getitem")]
[System.Web.Http.HttpGet]
[ResponseType(typeof(Item))]
public async Task<IHttpActionResult> GetItem(int id)
{
Item item = await db.items.FindAsync(id);
if (item == null)
{
return NotFound();
}
return Ok(item);
}
以下是 IIS 网站的 URI:
http://localhost/thephase
这是我正在访问的 URI:
http://localhost/thephase/api/Getitem/1
以下是浏览器中显示的错误:
{"消息":"找不到与请求 URI 匹配的 HTTP 资源 "http://localhost/thephase/api/GetItem/1","消息详细信息":"无类型 找到与名为"GetItem"的控制器匹配的控制器。
这是WebApiConfig
代码:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
}
该错误指出控制器被命名为 'GetItem'
,这是不正确的。因此,我认为问题出在WebApiConfig
路由代码上。
如果我从函数中删除int id
,则正确调用该函数。
这是没有参数的相同函数:
// GET: api/Getitemnoparameter
[Route("Getitemnoparameter")]
[System.Web.Http.HttpGet]
[ResponseType(typeof(Item))]
public async Task<IHttpActionResult> GetItem()
{
Item item = await db.items.FindAsync(1);
if (item == null)
{
return NotFound();
}
return Ok(item);
}
以下 uri 可正确访问该函数:
http://localhost/thephase/api/Getitemnoparameter
所以问题与int
参数有关。
有人可以帮我使用参数访问GetItem
函数吗?
由于您使用的是属性路由,因此还需要指定参数才能使其正常工作。
查看本教程以更好地理解。
路由前缀
[Route("Getitem/{id:int}")]
Id
是一个int
。 int
是一种值类型。值类型不能为空。将参数设置为 RouteParameter.Optional
,但如果它是可选的,则必须能够为其分配 null。
解决方案:使用可为空的 int
public async Task<IHttpActionResult> GetItem(int? id)