我正在编写一个C#web api 2 webservice,并希望获得一些帮助,以便将请求中的单个项目提供给Web服务。
以下是Web服务控制器类代码:
[RoutePrefix("api")]
public class ItemsWebApiController : ApiController
以下是网络服务功能:
// 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/api/Getitem/1
以下是浏览器中显示的错误:
{“Message”:“找不到与请求URI匹配的HTTP资源 'http://localhost/thephase/api/GetItem/1'。“,”MessageDetail“:”没有类型 被发现匹配名为'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
函数吗?
答案 0 :(得分:3)
答案 1 :(得分:1)
Id
是int
。 int
是值类型。值类型不能为null。您将参数设置为RouteParameter.Optional
,但如果它是可选的,则必须能够将其指定为null。
解决方案:使用可空的int
public async Task<IHttpActionResult> GetItem(int? id)