[英]WEB API 2 controller can't access the resource
我有一个支持MVC的Webforms项目。 我创建了一个WEB API 2控制器,该控制器使用的模型类是使用EF数据库首先生成的,用于将SQL表转换为实体模型。 当我启动应用程序时,控制器无法正常工作。 尝试访问api时得到以下信息:
HTTP错误404.0-找不到所需的资源已被删除,名称已更改或暂时不可用。
我的Controller类如下:
namespace YuClone.Controllers {
public class VideosController : ApiController
{
private YuCloneContext db = new YuCloneContext();
// GET: api/Videos
public IQueryable<video> Getvideos()
{
return db.videos;
}
// GET: api/Videos/5
[ResponseType(typeof(video))]
public IHttpActionResult Getvideo(long id)
{
video video = db.videos.Find(id);
if (video == null)
{
return NotFound();
}
return Ok(video);
}
// PUT: api/Videos/5
[ResponseType(typeof(void))]
public IHttpActionResult Putvideo(long id, video video)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != video.videoid)
{
return BadRequest();
}
db.Entry(video).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!videoExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
// POST: api/Videos
[ResponseType(typeof(video))]
public IHttpActionResult Postvideo(video video)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.videos.Add(video);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = video.videoid }, video);
}
// DELETE: api/Videos/5
[ResponseType(typeof(video))]
public IHttpActionResult Deletevideo(long id)
{
video video = db.videos.Find(id);
if (video == null)
{
return NotFound();
}
db.videos.Remove(video);
db.SaveChanges();
return Ok(video);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool videoExists(long id)
{
return db.videos.Count(e => e.videoid == id) > 0;
}
} }
如何解决这个问题?
编辑:
这是在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 }
);
}
}
在Global.aspx中的application_start方法中注册为:
RouteConfig.RegisterRoutes(RouteTable.Routes);
我用来访问资源的URL是:
http://localhost:5958/api/videos
您需要在Global.asax.cs
注册WebAPI路由:
GlobalConfiguration.Configure(WebApiConfig.Register);
您没有在注册WebAPI路由。
RouteConfig.RegisterRoutes(RouteTable.Routes);
此代码仅注册MVC控制器路由。 对于Web API,您需要通过调用您提到的类来注册Web api路由-
var config = GlobalConfiguration.Configuration;
WebApiConfig.Register(config); //register api routes
RouteConfig.RegisterRoutes(RouteTable.Routes);
这应该为您工作。
确保在RouteConfig.RegisterRoutes
之后调用WebApiConfig.Register
。 像这样:
System.Web.Http.GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.