我正在为我的Windows 8.1应用程序设置后端。我使用ASP.net WebApi来创建从DB访问数据的RESTful api,该api是在Windows .上设置的。
我的路线是这样的:
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultNamedApi",
routeTemplate: "api/{controller}/{name}",
defaults: new { name = RouteParameter.Optional }
);我试图实现的是使用不使用整数来访问数据--我想使用字符串访问数据。这是我的WebApi控制器的代码:
private SmokopediaContext db = new SmokopediaContext();
// GET api/Images
public IQueryable<ImageModel> GetImageModels()
{
return db.ImageModels;
}
// GET api/Images/5
[ResponseType(typeof(ImageModel))]
public IHttpActionResult GetImageModel(int id)
{
ImageModel imagemodel = db.ImageModels.Find(id);
if (imagemodel == null)
{
return NotFound();
}
return Ok(imagemodel);
}
public IHttpActionResult GetImageModel(string name)
{
ImageModel imagemodel = db.ImageModels.Find(name);
if(imagemodel == null)
{
return NotFound();
}
return Ok(imagemodel);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool ImageModelExists(int id)
{
return db.ImageModels.Count(e => e.ID == id) > 0;
}最重要的代码是带有string参数的GetImageModel过载。
服务器正在返回错误,该错误表示url的参数不正确:
<Error><Message>The request is invalid.</Message><MessageDetail>The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Http.IHttpActionResult GetImageModel(Int32)' in 'Smokopedia.Controllers.DragonController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.</MessageDetail></Error>在我的路线上应该纠正什么?
发布于 2014-10-09 12:11:21
api/{controller}/{id}和api/{controller}/{name}之间的URI模板术语没有区别;您为参数分配的任意名称不能用于解析路由。
关于如何根据参数类型“重载”路由的示例,请查看Overload web api action method based on parameter type。
发布于 2014-10-09 12:10:49
使用属性路由:
[Route("api/Images/{id:int}")]
public IHttpActionResult GetImageModel(int id){ do something}
[Route("api/Images/{id}")]
public IHttpActionResult GetImageModel(string id) {do something}发布于 2014-10-09 12:08:01
您的url/查询在这里很重要。
您可能正在使用:
http://yourapp.address/<Controller>/<name>这在这次注册中是行不通的。您的路由将该地址匹配到第一条匹配路由。蚂蚁,那是DefaultApi。你必须用
http://yourapp.address/<Controller>?name=<name>或者改变你的路线。
https://stackoverflow.com/questions/26277841
复制相似问题