繁体   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