Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# web api的问题_C#_Asp.net_Asp.net Web Api - Fatal编程技术网

C# web api的问题

C# web api的问题,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我正在使用ASP.Net web API。我在controllers文件夹中创建了一个名为API的文件夹,然后在该API文件夹中创建了一个API控制器。 在管理控制器中,我简单地放置了以下代码来检查api是否工作 public class AdminController : ApiController { DBEntities _context; public AdminController() { _context = new DBEntities();

我正在使用ASP.Net web API。我在controllers文件夹中创建了一个名为API的文件夹,然后在该API文件夹中创建了一个API控制器。 在管理控制器中,我简单地放置了以下代码来检查api是否工作

public class AdminController : ApiController
{
    DBEntities _context;
    public AdminController()
    {
        _context = new DBEntities();
    }
    [HttpGet]
    public IEnumerable<string> GetUsers()
    {

        return new string[] { "Muhammad","Ali"};
    }
}
然后我从浏览器中调用,但它给出了无法找到资源的http 404错误代码。它应该至少返回JSON结果,但给出了此错误。 非常感谢您的帮助。 当我进入chrome的“网络”选项卡时,它会显示请求的以下详细信息:


URL:

您应该使用“RoutePrefix”和“Route”属性。API应该知道如何将传入的请求导航到操作。这些属性可以帮助您。不要忘记添加这个名称空间“usingsystem.Web.Http”

using System.Web.Http

[RoutePrefix("api/admin")]
public class AdminController : ApiController
{
    DBEntities _context;
    public AdminController()
    {
         _context = new DBEntities();
    }
    [HttpGet]
    [Route("GetUsers")]
    public IEnumerable<string> GetUsers()
    {

        return new string[] { "Muhammad","Ali"};
    }
}

在Global.asax中,我使用GlobalConfiguration.ConfigureWebApiConfig.Register注册了Api 但问题是我把它放在底部,因为MVC优先,当我调用api/admin时,它给出了一个错误,说找不到资源,因为MVC正在运行。 我在顶部和Gloabl.asax中的ApplicationStart中添加了这个GlobalConfiguration.ConfigureWebApiConfig.Register,效果很好

protected void Application_Start()
    {
        GlobalConfiguration.Configure(config =>
        {
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        });
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
   }

您的global.asax.cs应该是这样的

它仍然不工作,先生。我已经在MVC模板中创建了该项目,但是通过从nuget package manager下载在引用中添加了web api,并且也在Global.asaxh中注册了。您如何知道属性路由已启用,或者希望使用它?为什么你只是提供一个没有解释的代码转储答案?它仍然不起作用,先生。我已经在MVC模板中创建了该项目,但通过从nuget package manager下载,在参考中添加了web api,并且已经在Global中注册。asax@Muhammad阿里:你要改变路线图课程吗?先生,我刚想出来,并回答了我自己的问题,请复习一下。你为什么把这个贴上剃须刀的标签?
protected void Application_Start()
    {
        GlobalConfiguration.Configure(config =>
        {
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        });
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
   }