webapiconfig 在哪里_webapiconfig - CSDN
精华内容
参与话题
  • ASP.NET Web API 之 WebApiConfig

    千次阅读 2017-03-03 18:15:09
    WebApiConfig位于WebAPI项目顶层目录App_Start下,并声明了它的WebApiConfig类。WebApiConfig只包含一个Register方法,由global.asax中的Application_Start()方法调用代码。 正如WebApiConfig类的名字表明的,这个...

    WebApiConfig位于WebAPI项目顶层目录App_Start下,并声明了它的WebApiConfig类。WebApiConfig只包含一个Register方法,由global.asax中的Application_Start()方法调用代码。


    正如WebApiConfig类的名字表明的,这个类可用于注册Web API配置的各个方面。默认情况下,项目模板生成的主要配置代码会注册一个默认的Web API路由。这个路由将收到的HTTP请求映射到控制器类,并解析YRL中可能带有的数据元素,确保处理管道中的其他类能够使用这些数据。默认的WebApiConfig类如下述代码所示。

        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API 配置和服务
                // 将 Web API 配置为仅使用不记名令牌身份验证。
                config.SuppressDefaultHostAuthentication();
                config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));


                // Web API 路由
                config.MapHttpAttributeRoutes();


                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
            }
        }

    你如果精通MVC开发,那么,可能已注意到ASP.NET Web API提供了一套用于注册Web API路由的扩展方法,与默认的MVC路由不同。例如,这个新项目在WebApiConfig类之外,还包含下面的类:

        public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");


                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
        }

    一个项目由两个路由注册方法这一点,乍看之下有些让人不知所以,因此,有必要解释一下二者的大致区别。有一点要记住的是,这些“映射”方法只是扩展方法,创建一个路由实例,并把这个实例添加到与宿主相关的路由集合之中。ASP.NET MVC和ASP.NET Web API的区别及其原因,在于它们使用的路由类不同,甚至路由集合的类型也不相同。ASP.NET Web API之所以使用与ASP.NET MVC不同的路由类型,是为了能够尽量脱离System.Web程序集里的Route和RouteCollection类相关的遗留代码,从而提供更为灵活的托管选项。这种设计带来的直接好处就是,ASP.NET Web API的自托管能力。

    配置ASP.NET Web API路由,需要声明HttpRoute实例并添加到路由集合中。虽然创建HttpRoute实例的扩展方法和ASP.NET MVC中的不同,但是,两种方法的语义几乎一样,都使用相同的元素,如路由名、路由模板和默认参数,甚至都使用路由约束。正如实例代码中看到的,项目模板的路由配置代码设置了一个默认的API路由,路由的URL前缀为“api”,后面接控制器名和一个可选的ID参数。这个路由配置不需要进行任何修改,就足以用来创建提供获取、更新和删除数据功能的API。


    参考文献

    [美] 布洛克Glenn Block),西布拉奥Pablo Cibraro) 等 著;金迎 译 《ASP.NET Web API 设计

    展开全文
  • 第一步:下载nuget包 ...第二步:在webApiConfig 中配置代码如下 public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 // Web API 跨域配置

    第一步:下载nuget包

    Install-Package Microsoft.AspNet.WebApi.Cors

    第二步:在webApiConfig 中配置代码如下

    public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API 配置和服务
    
                // Web API 跨域配置  引入跨域nuget包:Microsoft.AspNet.WebApi.Cors
                string cors_hosts = ConfigurationManager.AppSettings["cors_hosts"];
                if (!string.IsNullOrEmpty(cors_hosts))
                {
                    var allowOrigins = cors_hosts;//最好来自配置文件夹 "*"
                    var allowHeaders = "*";//最好来自配置文件夹
                    var allowMethods = "*";//最好来自配置文件夹
                    var globalCors = new System.Web.Http.Cors.EnableCorsAttribute(allowOrigins, allowHeaders, allowMethods)
                    {
                        SupportsCredentials = true,
                        // 设置预检查时间
                        PreflightMaxAge = 20 * 60,
                    };
                    config.EnableCors(globalCors);
                }
    
                // Web API 路由
                config.MapHttpAttributeRoutes();
    
                // Web API 全局异常捕捉
                config.Filters.Add(new ExceptionAPIFilter());
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{action}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
            }
        }

    最后在web.config配置文件中appSettings节点中配置允许访问的路径

    <appSettings>
        <!--支持跨域访问的域名,注意端口是必须的(除80),结尾不能加“/“-->
        <add key="cors_hosts" value="http://192.168.9.8:9527,http://192.168.9.176:9528,http://192.168.9.246:9529"/>
    </appSettings>

     

    展开全文
  • asp.net _路由配置

    千次阅读 2019-05-14 14:38:18
    路由配置一般是有两个RouteConfig、WebApiConfig。 RouteConfig RouteConfig一般是影响页面Controller,如下: public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { ...

    路由配置一般是有两个RouteConfig、WebApiConfig。

    RouteConfig

    RouteConfig一般是影响页面Controller,如下:

      public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
        }
    

    defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional },说明访问ip+端口,会默认跳到Home页面,Optional 意思是可选,如下:
    在这里插入图片描述
    如果我们制定controller跟action,也是一样可以访问到Home页面,如下:

    在这里插入图片描述

    WebApiConfig

    WebApiConfig是影响web api相关的ApiController:

     public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API 配置和服务
                // 将 Web API 配置为仅使用不记名令牌身份验证。
                config.SuppressDefaultHostAuthentication();
                config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
    
                // Web API 路由
                config.MapHttpAttributeRoutes();
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                )
            }
        }
    

    routeTemplate: “api/{controller}/{id}”,说明api请求路径规则是,ip+port+api+controller+id(可选),比如创建testController:

    public class testController : ApiController
      {      
          // GET: api/test
          public HttpResponseMessage Get()
          {
              AppHttpResponse r = new AppHttpResponse();
              r.Data = "from server";
              r.Message = "success";      
              return toJson(r);
          }
    
          // GET: api/test/5
          public string Get(int id)
          {
              return "value";
          }
    
          // POST: api/test
          public void Post([FromBody]string value)
          {
          }
    
          // PUT: api/test/5
          public void Put(int id, [FromBody]string value)
          {
          }
    
          // DELETE: api/test/5
          public void Delete(int id)
          {
          }
    
          public static HttpResponseMessage toJson(Object obj)
          {
              String str;
              if (obj is String || obj is Char)
              {
                  str = obj.ToString();
              }
              else
              {        
                  JavaScriptSerializer serializer = new JavaScriptSerializer();
                  str = serializer.Serialize(obj);
              }
              HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
              return result;
          }
      }
    

    接口访问如下:
    在这里插入图片描述
    如果WebApiConfig改成这样:

     public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API 配置和服务
                // 将 Web API 配置为仅使用不记名令牌身份验证。
                config.SuppressDefaultHostAuthentication();
                config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
    
                // Web API 路由
                config.MapHttpAttributeRoutes();
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/mobile/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                )
            }
        }
    

    浏览器就需要这样访问了:
    在这里插入图片描述

    一些相关的标签介绍:

    路由特性[Route (“api url”)]

    添加了特性路由后,只能通过特性路由的路径访问,而不受WebApiConfig限制
    1.路由特性无参数
    修改了testController如下:

          [Route ("room/fetch")]
            public HttpResponseMessage Get()
            {
                AppHttpResponse r = new AppHttpResponse();
                r.Data = "from server";
                r.Message = "success";
                return toJson(r);
            }
    

    这样需要通过浏览器这样访问:
    在这里插入图片描述

    2.路由特性方法有参数

      [Route("room/fetch/{id}")]
            public string GetListData0(int id)
            {
                return "value";
            }
    
    

    在这里插入图片描述

    3.路由特性方法有参数有默认值

    [Route("room/fetch/{id:int=6}")]
            public string GetListData1(int id)
            {
                return "value";
            }
    

    在这里插入图片描述

    4.特性路由有参数,参数在中间而且有默认值

     [Route("room/fetch/{id:int=6}/fetch")]
            public string GetListData3(int id)
            {
                return "value";
            }
    

    在这里插入图片描述

    路由前缀[RoutePrefix(“api url”)]

    如果还想对这个controller的所有接口加上默认前缀,可以这样做:

     [RoutePrefix("api/test")]
        public class testController : ApiController
        {
            private static readonly ILog loginfo = LogManager.GetLogger("loginfo");
            // GET: api/test
            [Route ("room/fetch")]
            public HttpResponseMessage Get()
            {
                AppHttpResponse r = new AppHttpResponse();
                r.Data = "from server";
                r.Message = "success";   
                return toJson(r);
            }
    

    那么浏览器需要这样访问:
    在这里插入图片描述

    指定Action名称[ActionName(“ActionName”)]
           [ActionName("GetData")]   
            public HttpResponseMessage Get()
            {
                AppHttpResponse r = new AppHttpResponse();
                r.Data = "from server";
                r.Message = "success";       
                return toJson(r);
            }
    

    访问缺出现了以下问题:

    The parameters dictionary contains a null entry for parameter ‘id’ of non-nullable type ‘System.Int32’ for method ‘System.String Get(Int32)’ in ‘web.Controllers.testController’. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.

    在这里插入图片描述
    原因是:指定了ActionName后,默认是Get请求,controller下面包含 Get(int id),会以这个去匹配参数。解决方法是把 Get(int id)注释掉。
    在这里插入图片描述

    指定请求方式:[HttpGet]、[HttpPost]

    [HttpGet]指定是Get请求,[HttpPost]指定是post请求

    Get请求把参数写到url里面:
    
            [HttpGet]
            [Route("api/Records")]
            public List<FaceRecord> Get([FromUri] int day)
            {           
            }
    
    展开全文
  • 今天想研究一下Web Api,写了一个测试Api,打开网站后浏览一下,可是却提示找不到方法,刚开始以为哪里配置错了,可找了半天也没见。 因为我是一个现有Mvc站点做的Demo,所以打算新建一个Mvc网站,再试一下,新...

    今天想研究一下Web Api,写了一个测试Api,打开网站后浏览一下,可是却提示找不到方法,刚开始以为哪里配置错了,可找了半天也没见。

    因为我是在一个现有Mvc站点做的Demo,所以打算新建一个Mvc网站,再试一下,新站点是正常的,对比一下Global文件,发现WebApiConfig和RouteConfig顺序不一样。

    如果把新站点的RouteConfig也放在WebApiConfig之前,同样提示找不到方法。看来这两个配置有关联呀。

          WebApiConfig.Register(GlobalConfiguration.Configuration);
          RouteConfig.RegisterRoutes(RouteTable.Routes);
    

      看了一下GlobalConfiguration类就明白了

        public static class GlobalConfiguration
        {
            private static Lazy<HttpConfiguration> _configuration = new Lazy<HttpConfiguration>(delegate {
                HttpConfiguration configuration = new HttpConfiguration(new HostedHttpRouteCollection(RouteTable.Routes));
                configuration.Services.Replace(typeof(IAssembliesResolver), new WebHostAssembliesResolver());
                configuration.Services.Replace(typeof(IHttpControllerTypeResolver), new WebHostHttpControllerTypeResolver());
                configuration.Services.Replace(typeof(IHostBufferPolicySelector), new WebHostBufferPolicySelector());
                return configuration;
            });
            public static HttpConfiguration Configuration
            {
                get
                {
                    return _configuration.Value;
                }
            }
            
           //...
        }
    

      

     public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    name: "Default",
                    url: "t/{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
        }
    
        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
            }
        }
    

      合并后的类似路由:

     1             routes.MapHttpRoute(
     2                 name: "DefaultApi",
     3                 routeTemplate: "api/{controller}/{id}",
     4                 defaults: new { id = RouteParameter.Optional }
     5             );
     6             routes.MapRoute(
     7                 name: "Default",
     8                 url: "{controller}/{action}/{id}",
     9                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    10             );

     

    如果顺序反了,DefaultApi的路由就永远匹配不到了,会一直找MVC的路由"{api}/{action}/{id}"。

    转载于:https://www.cnblogs.com/lizhanglong/p/3710567.html

    展开全文
  •  一种是App_Start.WebApiConfig.cs的Register中配置如下代码,这种方式将所有的webapi Controller里面起作用。 using System; using System.Collections.Generic; using System.Linq; using S...
  • .Net 通过设置Access-Control-Allow-Origin来实现跨域访问,具体哪里可以设置Access-Control-Allow-Origin呢? web.config中可以设置; IIS服务器站点的功能视图中设置HTTP响应标头; 通过nginx代理服务器进行设置...
  • 配置webapi

    2019-09-25 18:27:16
    1.Global.asax //把当前传输的数据格式,自动转换成json格式。 GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 2.App_Start文件夹中的WebApiConfig中 //跨域...
  • 出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。由于这个原因,我们不同站点之间的数据访问会被拒绝。
  • spring boot swagger-ui.html 404

    万次阅读 多人点赞 2018-06-06 15:50:42
    很奇怪的问题,找了好久。因为spring boot+swagger实现起来很简单。看下面三部曲:1.pom添加两个swagger依赖. &lt;!-- Swagger依赖包 --&gt; &lt;dependency&...springfox-swagge...
  • Swagger2配置文件

    2020-07-02 19:32:43
    @Configuration @EnableSwagger2 public class Swagger2Config { ... public Docket webApiConfig(){ return new Docket(DocumentationType.SWAGGER_2) .groupName("webApi") .apiInfo(webApiInfo()) .s
  • 有朋友私信我问项目的分层及文件夹结构我的第一篇博客中没说清楚,那么接下来我就准备从这些文件怎么分文件夹说起。问题大概有以下几点: 1、项目层的文件夹结构 2、解决MVC的Controller和Web API的Controller类名...
  • Web Api 的 路由机制

    千次阅读 2017-05-11 13:37:34
    ASP.NET Web API 是一种用于 .NET Framework 上构建 RESTful 应用程序的理想平台。所以我们要想学习web api 就要去了解它的路由机制。MVC和web api的路由机制的主要区别是web api 使用的是http 方法而不是url 的...
  • 通过继承ActionFilterAttribute使用其中的OnActionExecuting方法来实现IActionFilter接口。 派生ActionFilterAttribute类 // 登录认证特性 public class AuthenticationAttribute : ActionFilterAttribute ...
  • ASP.NET MVC4 配置逻辑

    2018-08-11 01:25:48
    &#13; 配置逻辑转移到App_Start:&#13; &#13;...通过代码进行的额外功能逻辑配置正开始集中到 Global.asax 中的 Application_Start 方法。...这些配置已经转移到了 App_Start 目录下的静态类中。...
  • 默认情况下ajax请求是有同源策略,限制了不同域请求的响应。 例子:http://localhost:23160/HtmlPage.html 请求不同源... What is "Same Origin"? Two URLs have the same origin if they have identical scheme...
  • 1、MVc 实现依赖注入 public class WindsorControllerFactory : DefaultControllerFactory { private readonly IKernel _kernel; ... public WindsorControllerFactory(IKernel kernel) ... ...
  • WebAPI请求

    千次阅读 2015-05-06 10:07:53
    于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直看相关的书或文章。因为之前大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过后来工作以后主要还是开发WebForm的...
  • 按照MvcContrib方式搭建了主/子项目,访问子项目url出现”无法找到资源” MvcContrib方式请参考: ... 于是断点:public class MyDemoAreaRegistration : PortableAreaRegistration{ p
  • 【1】
1 2 3 4 5 ... 7
收藏数 139
精华内容 55
关键字:

webapiconfig 在哪里