webapi 单个方法route_webapi route - CSDN
精华内容
参与话题
  •  创建 Web API 项目在这里我们使用VS2013, .NET 4.5.1创建一个Web API 2的项目选择项目WEB API模板, 在最下方的MVC主要是默认会自带微软的API Helper, 使用MVC发布在这里不实用安全 这样我们一个项目就初始化好了,...

    这篇做为这个系列的第一篇,做基本的介绍,有经验的人可以直接跳到第二部分创建 ProductController。

     

    创建 Web API 项目

    在这里我们使用VS2013, .NET 4.5.1创建一个Web API 2的项目

    image

    选择项目WEB API模板, 在最下方的MVC主要是默认会自带微软的API Helper, 使用MVC发布

    image

    在这里不实用安全

    image

     

    这样我们一个项目就初始化好了, 这都要归功于微软强大的VS

    image

     

    F5启动项目之后, 点击界面上API按钮可以看到默认创建的API

    image

     

    这时就可以用上面的地址通过一些测试工具来测试了. 这里推荐使用fiddler, 后面我们也将广泛使用这款工具来做调试.

     

    创建我们自己的API-Products API

    相关操作步骤如下

    添加ProductController

    image

    image

    image

    image

     

    在这里我们设计产品相关的API URL如下, 虽然这个不完全符合RESTFul标准,如有纠结的人直接忽略, 这里主要介绍如何把我们的URL定制成下面这个样子(也是我们项目中的样子):

    当然这里的API URL还有其他写法,这个有兴趣的后面章节可以再讨论。

    我们的 Product API简单的设计为下面格式:

    添加获取产品分页API: api/products/product/getList 
    添加获取单个产品API: api/products/product/get?productId=产品ID 
    添加产品新增API: api/products/product/add?productId=产品ID 
    添加产品更新API: api/products/product/update?productId=产品ID 
    添加产品删除API: api/products/product/delete?productId=产品ID

    在这里我们在刚才新添加的ProductController里中实现上面的API

    复制代码
    [RoutePrefix("api/products")]
        public class ProductController : ApiController
        {
            [HttpGet, Route("product/getList")]
            public Page<Product> GetProductList()
            {
                throw new NotImplementedException();
            }
    
            [HttpGet, Route("product/get")]
            public Product GetProduct(Guid productId)
            {
                throw new NotImplementedException();
            }
    
            [HttpPost, Route("product/add")]
            public Guid AddProduct(Product product)
            {
                throw new NotImplementedException();
            }
    
            [HttpPost, Route("product/update")]
            public void UpdateProduct(Guid productId, Product product)
            {
                throw new NotImplementedException();
            }
    
            [HttpDelete, Route("product/delete")]
            public void DeleteProduct(Guid productId)
            {
                throw new NotImplementedException();
            }
        }
    复制代码

    添加之后启动程序,看到的结果如下

    image



    到这里大家加上自己的后端业务逻辑,完成业务层面的操作就可以发布使用了。

    文章转载来自:http://www.cnblogs.com/Flyear/p/4870373.html

    展开全文
  • Asp.net Web Api开发(第三篇)自定义异常过滤器

    如果不自定义异常过滤器,客户端调用API出现错误时,将只能得到一个500之类的错误状态,以及一句:出现错误。而服务端却无法拦截到任何异常代码,当然你也可以在所有Action里面写try-catch来捕获处理。但这不是我想要的,我们可以自定义一个异常过滤器来捕获单个Action或整个Controller里面的所有Action的异常。

    上代码:

    using System.Net;
    using System.Net.Http;
    using System.Web.Http.Filters;
    using RRP.Models.Response;
    
    namespace RRPService.WebApi.Comm
    {
        /// <summary>
        /// 异常处理过滤器
        /// </summary>
        public class DExceptionFilterAttribute : ExceptionFilterAttribute
        {
            public override void OnException(HttpActionExecutedContext context)
            {
                //可以记录一些日志
                string fLog = context.Exception.ToString();
                //篡改Response
                context.Response = new HttpResponseMessage(HttpStatusCode.OK);
                context.Response.Content = new StringContent(Dimoo.Lib.DataPack.JSerialize(new BaseResult() { success = 0, msg = "处理异常" }));
            }
        }
    }

    然后,我们再把这个特性标记到所有Controller上或单个Action上面:

    
    

    using System.Linq;
    using System.Web.Http;
    
    namespace RRPService.WebApi.App.Controllers
    {
        [DExceptionFilter]
        public class CompanyController : ApiController
        {
            [HttpPost]
            [Route("api/1110")]
            public RRP.Company.Models.Response.C3000O Login(RRP.Company.Models.Request.C3000I aIn)
            {
                return RRP.Company.BLL.C3000(aIn);
            }
    
            [DExceptionFilter]
            [HttpPost]
            [Route("api/1110")]
            public RRP.Company.Models.Response.C3001O Login2(RRP.Company.Models.Request.C3001I aIn)
            {
                return RRP.Company.BLL.C3001(aIn);
            }
        }
    }
    
    最后,在Global.asax中注册我们得自定义异常过滤器:

    using RRPService.WebApi.Comm;
    using System.Web.Http;
    using System.Web.Mvc;
    
    namespace RRPService.WebApi.App
    {
        /// <summary>
        /// web api 服务
        /// </summary>
        public class WebApiApplication : System.Web.HttpApplication
        {
            /// <summary>
            /// 服务启动
            /// </summary>
            protected void Application_Start()
            {
                GlobalConfiguration.Configure(WebApiConfig.Register);
                GlobalConfiguration.Configuration.Filters.Add(new DExceptionFilterAttribute());//<<<<------------------重点
                //Json序列化库替换
                HttpConfiguration fConfig = GlobalConfiguration.Configuration;
                fConfig.Formatters.Remove(fConfig.Formatters.JsonFormatter);
                fConfig.Formatters.Remove(fConfig.Formatters.XmlFormatter);
                fConfig.Formatters.Insert(0, new JilFormatter());
            }
        }
    }

    展开全文
  • WebApi返回Xml和返回json处理方法

    千次阅读 2015-10-22 11:19:43
    webApi可以返回json、xml和自定义string字符串,本文我们不讨论返回string字符串。 一、全局都只能返回一种类型Xml或者json 1、返回xml,当我们新建一个webapi项目的时候系统默认webapiConfig默认返回xml此时...

    webApi可以返回json、xml和自定义string字符串,本文我们不讨论返回string字符串。

    一、全局都只能返回一种类型Xml或者json

    1、返回xml,当我们新建一个webapi项目的时候系统默认webapiConfig默认返回xml此时webapiconfig的配置为:

     public static void Register(HttpConfiguration config)
            {
                // Web API configuration and services
    
                // Web API routes
                config.MapHttpAttributeRoutes();
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{action}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
    
    
                config.Routes.MapHttpRoute(
                    name: "Products",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
    
                );
    }

    2、当我们需要返回json的时候整个配置文件变为

     public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API configuration and services
    
                // Web API routes
                config.MapHttpAttributeRoutes();
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{action}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
    
    
                config.Routes.MapHttpRoute(
                    name: "Products",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
    
                );
    
    
    
                var jsonFormatter = new JsonMediaTypeFormatter();
                //optional: set serializer settings here
                config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
                // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。
                // 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
    
    
                // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
    
                //config.EnableSystemDiagnosticsTracing();
            }
    
    
    
    
            public class JsonContentNegotiator : IContentNegotiator
            {
                private readonly JsonMediaTypeFormatter _jsonFormatter;
    
                public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
                {
                    _jsonFormatter = formatter;
                }
    
                public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
                {
                    var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
                    return result;
                }
            }
        }

    二、需要单个方法返回json,则只是需要在某一个方法中添加json方法。如下:

    public HttpResponseMessage PostUser(User user) 
    { 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    string str = serializer.Serialize(user); 
    HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; 
    return result; 
    } 



    封装返回json方法
    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; 
    } 




    展开全文
  • 1. 对于返回的Json对象格式是以“帕斯卡”风格的(例如“FirstName”),然而我们的Api有很大的可能被带有Javascript的客户端消费,对于JS开发者来说可能更适合“驼峰”风格(例如”firstName”)的数据。...

    1. 对于返回的Json对象格式是以“帕斯卡”风格的(例如“FirstName”),然而我们的Api有很大的可能被带有Javascript的客户端消费,对于JS开发者来说可能更适合“驼峰”风格(例如”firstName”)的数据。解决方案:配置Json格式。

    Web Api提供Xml和JSON作为返回数据的格式,框架会自动把这些格式注入管线。客户端可以通过Http请求头部来声明需要的数据格式,我们可以通过在“WebApiConfig”这个类来配置JSON数据的格式:

    复制代码
     public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API configuration and services
                var json = config.Formatters.JsonFormatter;
                // 解决json序列化时的循环引用问题
                json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                // 干掉XML序列化器
                config.Formatters.Remove(config.Formatters.XmlFormatter);
    
                var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
                jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    
    
                // Web API routes
                config.MapHttpAttributeRoutes();
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new {id = RouteParameter.Optional}
                    );
    
    
            }
        }
    复制代码

    首先根据HttpConfiguration对象获得jsonFormatter对象,然后设置ContractResolver属性。那么以后当我们使用JSON数据格式的时候就是“Camel”风格的了。

     

    2. 对于返回单个资源,我们应当返回相应的状态码(例如:成功200,资源未找到404等),解决方案:HttpResponseMessage对象

    Web Api框架中有一个”HttpResponseMessage“类可以用来返回Http状态码。有的时候使用状态码代替model来响应给客户端会更好

    复制代码
     public HttpResponseMessage GetCourse(int id)
            {
                try
                {
                    var course = TheRepository.GetCourse(id);
                    if (course != null)
                    {
                        return Request.CreateResponse(HttpStatusCode.OK, TheModelFactory.Create(course));
                    }
                    else
                    {
                        return Request.CreateResponse(HttpStatusCode.NotFound);
                    }
     
                }
                catch (Exception ex)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
                }
            }
    复制代码


    http://www.cnblogs.com/yxlblogs/p/3657602.html

    展开全文
  • 为了方面APP开发人员,服务端的接口都应当提供详尽的API说明。...Help Page安装步骤及扩展(以VS2015为例):右键点击WebAPI项目的引用,选择"管理NuGet程序包"在搜索框中输入 helppage进...
  • 这篇我们主要来介绍我们如何在API项目中完成API的登录及身份认证. 所以这篇会分为两部分, 登录APIAPI身份验证. 这一篇的主要原理是: API会提供一个单独的登录API, 通过用户名,密码来产生一个SessionKey, ...
  • Restful api详解和rpc api 区别

    万次阅读 2014-08-18 15:39:19
    REST (REpresentation State Transfer) 描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。REST 指的是一组架构约束条件和原则...
  • RESTful接口API设计规范

    千次阅读 2017-11-30 18:22:46
    最近需要使用RESTful的软件架构风格编写webapi接口,参考很多RESTful文档,认识RESTful的接口规范,特此作下笔记。
  • Python Flask Restful API 基础篇

    万次阅读 2016-12-20 23:14:35
    目前Web应用这块,restufl API用得非常普遍,因为,你手上的前端设备五花八门,各种系统的手机,pad等等,而且网站和手机APP经常会有需要资源共享的时候。 如果网站做个app,手机端再独立一个app,要保持2者同步,...
  • (精华)2020年9月22日 微服务 WebAPI详解

    万次阅读 2020-09-22 22:59:20
    if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
  • ASP.NET MVC4 App_Start 下各类的作用

    千次阅读 2014-09-02 09:28:44
    App_Start It has configuration classes to reduce clutter code in the Global.asax ...Application_Start 方法 App_Start 文件夹里有如下文件: AuthConfig.cs:  Related to security se
  • ASP.NET Web API详解

    千次阅读 2014-02-23 11:09:51
    在这篇文章中我们将讨论Web API设计、概念、功能,和对比Web API与WCF。 1. 实现一个Web API项目 我们从一个简单的实例开始讨论。我们使用Visual Studio 2012做为开发环境。我们第一步是基于Web API模版创建...
  • Vert.x(vertx) Web开发-路由

    万次阅读 热门讨论 2019-04-04 11:19:04
    在Vert.x 创建HTTP服务 中我们已经创建了一个简单的...Vert.x提供了Web开发组件vertx-web,提供了一堆Web开发中常用的功能。比如参数封装,路由,国际化,认证和授权,session和cookie以及模板等,可以非常方便的...
  • 采用Client Credentials方式,即应用公钥、密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open API,并且需要开发者提前向开放平台申请,成功对接后方能使用...
  • 支持多个版本的ASP.NET Core Web API

    千次阅读 2017-08-14 10:08:20
    基本配置及说明 版本控制有助于及时推出功能,而不会破坏现有系统。... 在这篇文章中,我们来看看如何支持多版本的ASP.NET Core Web API 创建一个ASP.NET Core Web API应用程序。通过 NuGet 安装
  • » 简单做个webapi(查询+添加)接口 首先,我们需要有一个webapi接口项目,我这里以前面WebApi接口 - 响应输出xml和json文章的项目来构建本篇文章的测试用例;这里新建一个 DbData 数据源类,主要用来做数据存储和...
  • 依旧先从爬虫的基本概念说起,你去做爬虫做数据抓取,第一件事想必是去查看目标网站是否有api。有且可以使用的话,皆大欢喜。   假如目标网站自身不提供api,但今天你心情不好就想用api来抓数据,那怎么办。有个...
  • 单个 Laravel 项目同时配置不同域名

    千次阅读 2018-08-22 11:35:35
    第一步:添加app\http\Controllers文件夹里面创建我们要存放前端和后端或者接口的文件夹 列如: Home(前端) Admin(后端) App(接口) 文件夹   第二步:修改app\... ...use Illuminate...
1 2 3 4 5 ... 20
收藏数 4,889
精华内容 1,955
关键字:

webapi 单个方法route