调用Web服务函数时为什么出现错误?
作者:互联网
我正在编写C#Web API 2 Web服务,希望获得一些帮助,以将单个项目从请求发送到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:
这是我正在访问的uri:
http://localhost/thephase/api/Getitem/1
这是浏览器中显示的错误:
{“Message”:”No HTTP resource was found that matches the request URI
‘07002’.”,”MessageDetail”:”No type
was found that matches the controller named ‘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}")]
标签:asp-net-web-api2,c 来源: https://codeday.me/bug/20191027/1944380.html