[英]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.