webapiconfig 添加多个_net webapi 多路由 webapiconfig - CSDN
精华内容
参与话题
  • ASP.NET MVC同时支持web与webapi模式

    千次阅读 2017-03-23 16:19:21
    我们在创建 web mvc项目时是不支持web api的接口方式访问的,所以我们需要添加额外的组件来支持实现双模式。 首先我们需要准备三web api依赖的组件(目前在.net 4/4.5版本下面测试正常,2.0暂未进行测试,需要...

    我们在创建 web mvc项目时是不支持web api的接口方式访问的,所以我们需要添加额外的组件来支持实现双模式。

    首先我们需要准备三个web api依赖的组件(目前在.net 4/4.5版本下面测试正常,2.0暂未进行测试,需要自行测试)

    1、Microsoft.AspNet.WebApi.Client.5.2.2

    2、Microsoft.AspNet.WebApi.Core.5.2.2

    3、Microsoft.AspNet.WebApi.WebHost.5.2.2

    web api依赖组件下载地址 https://pan.baidu.com/s/1slJHdVJ

    下载依赖组件后解压至packages目录或其他目录即可,解压完毕后打开编辑器 > 添加引用 > 找到下载的三个依赖dll并引用(其中Microsoft.AspNet.WebApi.Client.5.2.2为System.Net.Http的扩展包,故引用只有两个):


    (如果原来已经引用了System.Web.Http则需要删除原来的引用后重新引用

    添加完引用后,我们需要在App_Start目录添加一个WebApiConfig的配置文件,用于初始化api访问路由,代码如下:

        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API 路由
                config.MapHttpAttributeRoutes();
    
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
            }
        }

    添加完该配置文件后,我们接下来就需要在Global.asax全局文件中注册该配置文件:

            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                GlobalConfiguration.Configure(WebApiConfig.Register);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
            }

    (注意:GlobalConfiguration.Configure(WebApiConfig.Register);注册信息必须位于普通RouteConfig之前,不然无法生效。)

    完成以上配置操作后,我们就对webapi的基本运行环境配置完毕了,接下来我们添加一个web api controller:

        [RoutePrefix("api/Notify")]
        public class NotifyController : ApiController
        {
            [Route("Alipay")]
            public string Alipay()
            {
                return "success";
            }
        }	

        [RoutePrefix("api/Notify")] 配置api访问路径 示例:http://domain/api/Notify

        [Route("Alipay")] 配置api访问接口  示例:http://domain/api/Notify/Alipay


    如果需要对某个方法设置访问模式,则可以添加上[HttpPost]或[HttpGet]位于[Route]上方。

    展开全文
  • ASP.NET WebApi 路由配置

    千次阅读 2017-11-27 14:57:01
    一、模板路由1、在App_Start文件夹下面的WebApiConfig,默认路由配置为:using System; using System.Collections.Generic; using System.Linq; using System.Web.Http;namespace testAPI { public static class ...

    WebApi相关文章:

    一、模板路由

    1、在App_Start文件夹下面的WebApiConfig,默认路由配置为:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.Http;
    
    namespace testAPI
    {
        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
                config.EnableSystemDiagnosticsTracing();
            }
        }
    }
    

    url:api/{controller}/{id}

    2、在控制器里面添加一个get请求:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;
    
    namespace testAPI.Controllers
    {
        public class ValuesController : ApiController
        {
            [HttpGet]
            public string Get1()
            {
                return "value1";
            }
        }
    }

    3、启动项目,浏览器测试:
    这里写图片描述
    可以看到通过get请求获取到了数据

    4、在控制器里面再添加一个get请求:

    public class ValuesController : ApiController
        {
            [HttpGet]
            public string Get1()
            {
                return "value1";
            }
    
            public string Get2()
            {
                return "value2";
            }
    
    
        }

    启动项目,浏览器测试:
    这里写图片描述

    我们发现发生错误:找到了与该请求匹配的多个操作
    那要怎么处理呢,把第二个方法改成post请求:

    public class ValuesController : ApiController
        {
            [HttpGet]
            public string Get1()
            {
                return "value1";
            }
            [HttpPost]
            public string Get2()
            {
                return "value2";
            }
        }

    测试请求:
    这里写图片描述
    可以正确获取到数据,且如果是post请求返回Get2的信息,如果是get请求返回Get1的信息;

    从上面两个测试我们可以得出如下结论:
    当多个action的 请求方式一样的话,在默认路由模板下(没有action),将会匹配多个操作。 基于上面两点结论,默认路由模板无法满足针对一种资源一种请求方式的多种操作。

    5、自定义一个路由:

    public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
                //自定义路由:匹配到action
                config.Routes.MapHttpRoute(
                    name: "ActionApi",
                    routeTemplate: "actionapi/{controller}/{action}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
                config.EnableSystemDiagnosticsTracing();
            }
        }

    控制器方法:

     public class ValuesController : ApiController
        {
            public string Get1()
            {
                return "value1";
            }
            public string Get2()
            {
                return "value2";
            }
        }

    测试:
    这里写图片描述
    这里写图片描述
    这里写图片描述
    请求http://localhost:26753/actionapi/values返回404错误;
    请求http://localhost:26753/actionapi/values/get1返回Get1的信息;
    请求http://localhost:26753/actionapi/values/get2返回Get2的信息;

    通过定制路由模板我们可以得出如下结论:
    通过在路由模板中增加action目录,对资源的定位直接作用到action上。 多个HttpGet方法可以共存于一个controller中。

    二、特性路由

    特性路由主要处理一些比较复杂的请求url,如资源之间存在嵌套关系:客户包含订单,书有作者属性等等。对于这种Uri,我们希望的路由是这样的:/costomers/{customerid}/orders 或 /costomers/{customerid}/orders/{orderid}

    考虑到这只是某个Controller的路由格式,而我们会有很多个Controller,用基于约定路由显然不合适(要配置很多的路由)

    使用特性路由就简单了,在action上加一个特性即可

    [Route("customers/{productId}/orders")]
    public string getProductName(int productId)
    {
        return "name";
    }

    使用特性路由需要在WebApiConfig中添加config.MapHttpAttributeRoutes();

    public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                config.MapHttpAttributeRoutes();
                ...
            }
        }
    展开全文
  • 如何向MVC5项目中添加Wep API

    千次阅读 2016-06-16 11:14:50
    近来学习MVC,已经能试着显示一列表了(真实数据),想到一网站的首页会有很列表,如何操作呢?某人提醒我用API+jquery显示数据。一、查看MVC版本,决定你有没有必要看这篇文章 打开web.config,看到以下内容...

    近来学习MVC,已经能试着显示一个列表了(真实数据),想到一个网站的首页会有很多列表,如何操作呢?某人提醒我用API+jquery显示数据。

    一、查看MVC版本,决定你有没有必要看这篇文章
    打开web.config,看到以下内容

          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
          </dependentAssembly>

    二、添加Controller
    Controller文件夹 右击-添加-Web API控制器(v2.1),建好后,系统自动创建以下文件:
    App_Start/WebApiConfig.cs(没有请添加)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.Http;
    
    namespace FirstMvc5
    {
        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.asax.cs
    打开Global.asax.cs,添加:GlobalConfiguration.Configure(WebApiConfig.Register);

    完整代码如下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    using System.Web.Http;
    
    namespace FirstMvc5
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                GlobalConfiguration.Configure(WebApiConfig.Register);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }
        }
    }
    

    四、添加 WebAPI Help
    (本部分内容来源微软官方:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/creating-api-help-pages)
    工具菜单中,选择NuGet包管理器,然后选择程序包管理器控制台。在程序包管理器控制台窗口中,键入下列命令之一 ︰

    C#应用程序 ︰Install-Package Microsoft.AspNet.WebApi.HelpPage
    Visual Basic应用程序 ︰Install-Package Microsoft.AspNet.WebApi.HelpPage.VB

    自动添加了Areas文件夹

    五、大功告成
    生成,预览http://xxx:20836/Help

    其实更简单的就是创建项目的时候同时选择MVC和WebAPI,以上只是我的补救措施

    展开全文
  • 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很文章,我就不在详细描述了,作为小白我只说一下自己的使用心得。  在webapi中使用System.Web.Http.Cors配置跨域信息可以有两种方式,一种是在App_...

    System.Web.Http.Cors配置跨域访问的两种方式

      使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心得。在webapi中使用System.Web.Http.Cors配置跨域信息可以有两种方式。
      一种是在App_Start.WebApiConfig.cs的Register中配置如下代码,这种方式将在所有的webapi Controller里面起作用。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.Http;
    using System.Web.Http.Cors;
    
    namespace YDTG.Service
    {
        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API 配置和服务
    
                // Web API 路由
                config.MapHttpAttributeRoutes();
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{action}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
                //这是重点,从配置文件的appsettings节点中读取跨域的地址
                var cors = new EnableCorsAttribute(ConfigurationManager.AppSettings["origins"], "*", "*");
                config.EnableCors(cors);
            }
        }
    }
    

    配置文件如下,注意一定要加上http

    <add key="origins" value="http://localhost:9012,http://192.168.1.108:9012" />

      第二种方式就是在每个webapiController类中设置,即每个控制器个性化配置,如下代码。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Http.Cors;
    using System.Web.Mvc;
    
    namespace Service.Controllers
    {
        [EnableCors("http://localhost:9012,http://192.168.1.108:9012", "*", "*")]
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                ViewBag.Title = "Home Page";
    
                return View();
            }
        }
    }
    

    注意事项

    1. EnableCors共三个参数分别为origins、headers和methods。origins配置允许访问的域名,多个域名以逗号分隔即可,域名一定要完整,如果是ip地址前面要加上“http”,只使用IP的话一定会失效的。参数headers配置所支持的资源。参数methods配置支持的方法,get、post、put等。如果允许任意域名、任意资源、任意方法访问自己的webapi,则三个参数全部使用星号”*”即可
    2. “EnableCors(“http://localhost:9012,http://192.168.1.108:9012“, ““, ““)”中的配置如果出现错误的话不会报错,而是直接禁止未出现在配置表中的资源访问。
    3. 如果使用第一种方式那么可以从配置文件中读取网站列表,如果使用第二种方式,所有的参数只能使用常量。
    展开全文
  • 在写js通过ajax调用api时,使用了webapi。  webapi是mvc4中的新玩意儿。他的路由定义单独放在了WebApiConfig.cs中,...  WebApiConfig.cs中只有一Register方法,只有这么几行: config.Routes.MapHttpRoute
  • WebAPI路由、参数绑定

    千次阅读 2017-08-10 22:47:37
    以Fiddler为例,这是一http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据。...
  • Web API学习基础一

    千次阅读 2015-06-24 21:33:01
    开发环境VS2012、.NET 4.5 创建项目VS2012->文件->...在App_Start中,RouteConfig.cs文件配置MVC的路由规则,WebApiConfig.cs配置WebApi的路由规则 在Controllers文件夹中编写控制器,可以编写MVC控制器也可以编写W
  • MVC及Web API添加身份验证及错误处理的过滤器 先说身份验证的问题。无论是mvc还是api都有一安全性的问题,未通过身份验证的人能不能访问的问题。我们新一空项目时,默认是没有身份验证的,除非你在控制器类...
  • WebApplicationWebApiHangfireSample在根目录添加Startup.cs文件using Hangfire; using Hangfire.MemoryStorage; using Microsoft.Owin; using Owin;[assembly: OwinStartup(typeof(WebApplicationWebApiHangfi
  • WebApi路由机制详解——看完不会用你打我

    万次阅读 多人点赞 2020-10-11 17:15:02
    随着前后端分离的大热,WebApi在项目中的作用也是越来越重要,由于公司的原因我之前一直没有机会参与前后端分离的项目,但WebApi还是要学的呀,因为这东西确实很有用,可单独部署、与前端和App交互都很方便,既然有...
  • Asp.net+Vue+EmelentUI的实现(一)框架搭建

    万次阅读 2019-05-06 16:31:02
    vue对于web端的开发优势是很明显的,特别是单页应用,响应、数据等都很明显,而且开发效率也高,又有很资料可查、有社区的支持。但vue对于开发较大的项目时,则会显得笨重,因为编译成了单页应用,非常臃肿,首次...
  • Idea ... 使其加快响应速度。 我们试着从页面中消除ViewState,使其在客户端轻量化,并且仅通过服务(Web API) ...Part I :使用Bootstrap创建一ASP.NET Web表单移动应用程序来设计布局,将Web ...
  • 前言 刚开始创建MVC与Web API的混合项目时,碰到好多问题,今天拿出来跟大家一起分享下。有朋友私信我问项目的分层及文件夹结构在我的第一篇博客中没说清楚,那么接下来我就准备从这些文件怎么分文件夹说起。...
  • WebApi返回类型设置为json的三种方法

    千次阅读 2018-09-06 13:06:46
    找到Global.asax文件,在Application_Start()方法中添加一句: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 修改后: protected void Application_Start() { ...
  • WebApi特性路由和路由前缀

    千次阅读 2017-07-02 23:01:00
    WebApi2默认的路由规则我们称作基于约定路由,很时候我们使用RESTful风格的URI.简单的路由是没问题的,如 api/Products/{id},但有些事很难处理的,如资源之间存在嵌套关系:客户包含订单,书有作者属性等等。对于...
  • Web Api 创建及其使用

    千次阅读 2019-03-11 18:43:32
    由于创建博客,我需要尝试一些新的技术,新的思路,所以我没规规矩矩的写博客,用上了诸多以前没用的东西,比如现在这(我只是听过webapi我连webserver都只是用过两三次/手动滑稽) 昨天开始研究的,一直到现在,...
  • 关于 MVC API 控制器一点心得

    千次阅读 2014-06-08 14:38:05
    最近在为移动端app开发可供调用的接口程序,去了解了一下MVC API Controller,简单的总结了一下API Controller的使用。 1.首先xu
  • C# web api返回类型设置为json的两种方法 web api写api接口时默认返回的是把你的对象序列化后以...找到Global.asax文件,在Application_Start()方法中添加一句:  。代码如下: GlobalConfiguration.Conf
  • 1.一般的解决方案里面有一Filters文件夹,需要在这文件夹里面添加类文件  public class CrossSiteAttribute: System.Web.Http.Filters.ActionFilterAttribute  {  private const string Origin = "...
  • c# webapi 开发

    千次阅读 2015-09-09 18:09:26
    首先创建一项目,web-----》webapi----控制器添加控制器ProductsController 不说直接上代码:  public class ProductsController : ApiController  {  Product[] products = new Product[]   {   new...
1 2 3 4 5 ... 20
收藏数 1,341
精华内容 536
关键字:

webapiconfig 添加多个