簡體   English   中英

WEB API 2控制器無法訪問資源

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM