精华内容
下载资源
问答
  • C# Restful 启用 Session

    2017-12-07 17:52:00
    虽然很多人说不建议启用,但我就是想启用。 [ServiceContract(SessionMode=SessionMode.Allowed)] public interface IBIService ...[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilit...

    虽然很多人说不建议启用,但我就是想启用。

     

    [ServiceContract(SessionMode=SessionMode.Allowed)]
        public interface IBIService
        {
    
        }
    
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
        [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
        public class BIService:IBIService
        {
    
        }

    如果接口上启用了session,实现类必须指定session模式,否则可能导致服务被调用一次后,一直报跨域错误。

    转载于:https://www.cnblogs.com/nanfei/p/8000289.html

    展开全文
  • <div><p>I have tried alot with different stuff but I am unable to send request and response to the methods I created. Can you please tell me where I am doing wrong in this? <p>In a Class on Web API ...
  • 它本身并没有创造新的技术、组件与服务,更像是告诉大家如何更好地使用现有Web标准中的一些准则和约束,也不可否认,RESTFul 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。 RESTful 风格的 API,在 ...

    REST 全称是 Representational State Transfer,有人说它是一种风格,并非一种标准,个人觉得挺有道理。它本身并没有创造新的技术、组件与服务,更像是告诉大家如何更好地使用现有Web标准中的一些准则和约束,也不可否认,RESTFul 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。

    RESTful 风格的 API,在 HTTP 协议上使用的是标准 HTTP 方法,GET、PUT、POST 和 DELETE 等。

    常用实践

    (1)API 返回结果通常为 JSON 形式,请求的头部属性 Accept 通常设置为 application/json

    (2)请求的 Body 数据部分使用 JSON 形式

    (3)鉴权信息使用 JWT 等形式的授权码方式,放在请求头部属性中传输,属性名称自定义,如 auth,token 等等

     

    辅助类设计

    (1)属性定义

    定义属性:TokenHeaderName

    上述实践描述中,自定义部分为鉴权信息在头部属性中的名称,定义该属性表示这个名称。

    定义属性:DefaultToken

    考虑到鉴权信息在某些场景下可初始为一个固定值,定义该属性在默认情况下使用。

    具体定义如下:

    // 鉴权 token 的请求头属性名称
    public String TokenHeaderName { get; set; }
    
    // 默认的鉴权 token 信息
    public String DefaultToken { get; set; }

    (2)方法定义

    方法定义跟标准的 HTTP 方法一致,这里定义常用的 Get、Put、Post、Delete 方法。

    再抽取其中会重复的部分形成一些私有方法来复用,再重载一些方法使得可以应用默认参数值。

    (2.1)构造方法

    构造时可以指定鉴权头部属性名和 token,也可以不指定。

    public RestApiVisitHelper()
    {
    
    }
    
    // 构造时设置鉴权 token 的请求头属性名称
    public RestApiVisitHelper(String tokenHeaderName)
    {
        TokenHeaderName = tokenHeaderName;
    }
    
    // 构造时设置鉴权 token 的请求头属性名称,以及默认的 token 值
    public RestApiVisitHelper(String tokenHeaderName, String defaultToken){
        TokenHeaderName = tokenHeaderName;
        DefaultToken = defaultToken;
    }  

    (2.2)访问所需辅助方法

    (2.2.1) 创建 WebClient,设置好相关属性,包括鉴权头部信息

    // 创建 WebClient 并设置好 token 信息
    private WebClient CreateWebClient(String token)
    {
        System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
        System.Net.WebClient webClientObj = new System.Net.WebClient();
        webClientObj.Headers.Add("Accept", "application/json");
        if (!String.IsNullOrEmpty(TokenHeaderName) && !String.IsNullOrEmpty(token))
        {
            webClientObj.Headers.Add(TokenHeaderName, token);
        }
        webClientObj.Encoding = Encoding.UTF8;
        return webClientObj;
    }

    (2.2.2)将查询参数格式化拼接成最终 url

    // 将查询参数格式化拼接到 url 上形成最终的访问地址
    private String FormatUrl(String apiUrl, Hashtable queryParams)
    {
        String queryString = "";
        foreach (var k in queryParams.Keys)
        {
            if (!String.IsNullOrEmpty(queryString))
            {
                queryString += "&";
            }
            queryString += String.Format("{0}={1}", k, queryParams[k]);
        }
        if (!String.IsNullOrEmpty(queryString))
        {
            apiUrl += "?" + queryString;
        }
        return apiUrl;
    }

    (2.2.3)异常统一处理

    出现请求异常时,可以统一进行处理,具体返回结果可自行定义。

    // 异常时返回的信息:应该根据实际需要进行返回
    private String WhenError(Exception e)
    {
        JObject result = new JObject();
        result["err_code"] = -1;  
        if (e is WebException)
        {
            var we = (WebException)e;
            if (we.Response != null)  // 如果有输出则仍然返回实际输出
            {
                return new StreamReader(we.Response.GetResponseStream()).ReadToEnd();
            }
            else
            {                    
                result["err_msg"] = we.Message;
            }
        }
        else
        { 
            result["err_msg"] = e.Message; 
        }
        return result.ToString(Newtonsoft.Json.Formatting.None);
    }

    (2.3)公开方法具体实现

    有了以上辅助方法,实现代码会变得简洁,且各个方法代码结构类似。以下以 Post 方法(包括重载) 为例展示基本实现。

    /// <summary>
    /// Post Api 返回结果文本,使用默认的鉴权 token
    /// </summary>
    /// <param name="apiUrl"></param>
    /// <param name="queryParams"></param>
    /// <param name="body"></param>
    /// <returns></returns>
    public String Post(string apiUrl, Hashtable queryParams, JObject body)
    {
        return Post(apiUrl, queryParams, body, DefaultToken);
    }
    
    /// <summary>
    /// Post Api 返回结果文本
    /// </summary>
    /// <param name="apiUrl"></param>
    /// <param name="queryParams"></param>
    /// <param name="body"></param>
    /// <param name="token"></param>
    /// <returns></returns>
    public String Post(string apiUrl, Hashtable queryParams, JObject body, String token)
    {
        System.Net.WebClient webClientObj = CreateWebClient(token);
    
        apiUrl = FormatUrl(apiUrl, queryParams);
        try
        {
            String result = webClientObj.UploadString(apiUrl, "POST", body.ToString(Newtonsoft.Json.Formatting.None));
            return result;
        }
        catch (Exception ce)
        {
            return WhenError(ce);
        }
    }

    完整源码

    https://github.com/triplestudio/helloworld/blob/master/RestApiVisitHelper.cs

     

    展开全文
  • c#调用Restful API

    千次阅读 2015-06-09 10:57:53
    有些朋友在调用Restful Api时,可能要提供用户名和密码进行Http身份验证,这里我们可以通过为请求增加一个 NetworkCredentials 实例来完成. // Create the web request HttpWebRequest request = WebRequest...
    
    


    一、概述

    System.Net命名空间包含了 HttpWebRequestHttpWebResponse 类的获取从Web服务器和基于HTTP的Web服务的数据。通常你还需要添加一个引用System.Web,这将给你访问HttpUtility类,它提供的方法对HTML和URL编码和解码的文本字符串。 虽然一些网络服务也可以返回其他格式的数据,如JSON和序列化的PHP,但最容易利用的还是XML,因为在.NET Framework广泛支持这种格式的读取和操作。

    二、获取数据

    1、以Get方式获取

    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    
    // Create the web request
    HttpWebRequest request = WebRequest.Create("http://developer.yahoo.com/") as HttpWebRequest;
    
    // Get response
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
    // Get the response stream
    StreamReader reader = new StreamReader(response.GetResponseStream());
    
    // Console application output
    Console.WriteLine(reader.ReadToEnd());
    }

    2、以Post方式获取

    using System.Web;
    
    Uri address = new Uri("http://api.search.yahoo.com/ContentAnalysisService/V1/termExtraction");
    
    // Create the web request
    HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
    
    // Set type to POST
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    
    // Create the data we want to send
    string appId = "YahooDemo";
    string context = "Italian sculptors and painters of the renaissance"
    + "favored the Virgin Mary for inspiration";
    string query = "madonna";
    
    StringBuilder data = new StringBuilder();
    data.Append("appid=" + HttpUtility.UrlEncode(appId));
    data.Append("&context=" + HttpUtility.UrlEncode(context));
    data.Append("&query=" + HttpUtility.UrlEncode(query));
    
    // Create a byte array of the data we want to send
    byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
    
    // Set the content length in the request headers
    request.ContentLength = byteData.Length;
    
    // Write data
    using (Stream postStream = request.GetRequestStream())
    {
    postStream.Write(byteData, 0, byteData.Length);
    }
    
    // Get response
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
    // Get the response stream
    StreamReader reader = new StreamReader(response.GetResponseStream());
    
    // Console application output
    Console.WriteLine(reader.ReadToEnd());
    }

    三、HTTP 验证请求

    有些朋友在调用Restful Api时,可能要提供用户名和密码进行Http身份验证,这里我们可以通过为请求增加一个 NetworkCredentials 实例来完成.

    // Create the web request
    HttpWebRequest request
    = WebRequest.Create("https://api.del.icio.us/v1/posts/recent") as HttpWebRequest;
    
    // Add authentication to request
    request.Credentials = new NetworkCredential("username", "password");
    
    // Get response
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
    // Get the response stream
    StreamReader reader = new StreamReader(response.GetResponseStream());
    
    // Console application output
    Console.WriteLine(reader.ReadToEnd());
    }

    展开全文
  • C# 实现RestFul 服务

    千次阅读 2019-07-30 09:41:24
    namespace RestfulService { // 定义两种方法,1、GetInputFunc:input,返回input;2、PostInputFunc:通过POST请求,传入input,返回input [ServiceContract(Name = "GetInputService")] public interface ...
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.Activation;
    using System.ServiceModel.Web;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace RestfulService
    {
        // 定义两种方法,1、GetInputFunc:input,返回input;2、PostInputFunc:通过POST请求,传入input,返回input
        [ServiceContract(Name = "GetInputService")]
        public interface IRestFulDemoServices
        {
            //说明:GET请求
            //WebGet默认请求是GET方式
            //UriTemplate(URL Routing)input必须要方法的参数名必须一致不区分大小写)
            [OperationContract]
            [WebGet(UriTemplate = "GetInput/{input}", BodyStyle = WebMessageBodyStyle.Bare)]
            string GetInputFunc(string input);
    
            //说明:POST请求
            //WebInvoke请求方式有POST、PUT、DELETE等,所以需要明确指定Method是哪种请求的,这里我们设置POST请求。
            //UriTemplate(URL Routing)input必须要方法的参数名必须一致不区分大小写)
            //RequestFormat规定客户端必须是什么数据格式请求的(JSon或者XML),不设置默认为XML
            // ResponseFormat规定服务端返回给客户端是以是什么数据格返回的(JSon或者XML)
            [OperationContract]
            [WebInvoke(Method = "POST", UriTemplate = "GetInput/{input}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
            string PostInputFunc(string input);
        }
    
        [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
        [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
        public class RestFulDemoServices : IRestFulDemoServices
        {
            public string GetInputFunc(string Input)
            {
                return Input;
            }
            public string PostInputFunc(string Input)
            {
                return Input;
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    RestFulDemoServices demoServices = new RestFulDemoServices();
                    WebServiceHost _serviceHost = new WebServiceHost(demoServices, new Uri("http://localhost:8000/"));
                    _serviceHost.Open();
                    Console.WriteLine("Web服务已开启...");
                    Console.WriteLine("输入任意键关闭程序!");
                    Console.ReadKey();
                    _serviceHost.Close();
                }
                catch(Exception ex)
                {
                    Console.WriteLine("Web服务开启失败:{0}\r\n{1}", ex.Message, ex.StackTrace);
                }
            }
        }
    }
    

    代码下载地址:https://download.csdn.net/download/u014378771/11430827

    步骤:

    一、新建解决方案。

    二、添加新建项目

    三、添加引用

     

    四、复制代码即可实现C#服务。

    五、测试

    利用Postman测试结果如下。(虽然调用时URL一样,但是方法不一样,返回值不一样)

    测试GET方法:注意左边的GET。

     

    测试POST方法:注意左边的POST

     

    展开全文
  • C# 调用RESTFul接口

    千次阅读 2018-12-09 18:39:55
    //创建restful的请求 HttpWebRequest request = WebRequest . Create ( url ) as HttpWebRequest ; request . Method = "post" ; request . ContentType = "application/json" ; //创建参数 ...
  • C#调用RESTful API

    2017-05-07 08:04:00
    如今非常多的网络服务都用RESTful API来实现。比方百度的搜索推广API介绍使用Rest原因:REST+JSON风格的API相比SOAP+XML,优点是:调用更加灵活。也更easy扩展;JSON格式传输信息比XML降低约30%的数据量,效率更高。...
  • restful c#案例

    热门讨论 2014-02-18 17:22:58
    restful架构, c#案例,源代码,文档中可直接看详解。。
  • C# 调用restful api

    千次阅读 2018-01-02 15:59:43
    public string getUrlJson(string url)  {  try  {  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);  request.Method = "pos
  • C# 调用Restful 请求

    2017-12-14 23:10:00
    public static class HttpClientHelper { public static HttpClient GetXXXClient() { return GetHttpClient(ConfigurationManager.AppSettings["xxxxRESTService"]); ...
  • 该文档说明c#端如何创建服务端RestFul Service接口,并给出详细的代码说明,方便用户学习和深入掌握。
  • C#实现Web格式的API有很多种方法,包括: 1、直接用webform窗体实现,这是需要把窗体上的除了第一行的代码全删了,主要靠Page_load中写代码,利用webform提供的server、page、上下文等对象解释参数,和返回数据。 ...
  • C# 一个简单的 Restful 服务端和 Restful 客户端 Demo
  • C#调用Java restful接口

    千次阅读 2019-01-16 16:30:47
    C#调用Java restful接口时需要把电脑远程访问打开 我的项目时C#封装的数据都封装成一个json对象,所以接收的时候可以直接单独封一个实体对象来接收,或者直接使用 @PathVariable注解将不想封装的参数作为路径来...
  • 该文档说明c#端如何创建和调用RestFul接口,并给出详细的代码说明,方便用户学习和深入掌握。
  • using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Net.Security;...using System.Security.Cryptography.X509Certificates;...
  • C#调用RESTful风格的Web服务方法

    千次阅读 2019-01-18 10:05:52
    首先我们先包装一个RestClient类,用于实现调用RESTful风格的Web服务,具体代码参考如下: public class RestClient { /// &lt;summary&gt; /// Request Uri String /// &lt;/summary&gt; ...
  • 教你用c#调用Restful API

    2019-09-30 01:56:00
    http://www.makeyuan.com/2014/02/27/1117.html 转载于:https://www.cnblogs.com/srotony/articles/3868237.html
  • .NET环境下我们想调用其它开放平台的服务接口,不需要自己去实现底层,开源的库用起来会很方便 hammock http://www.cnblogs.com/shanyou/archive/2012/05/01/2478245.html ... RestSharp库 ...
  • 写两个函数,函数的UriTemplate名称一致!这个方法简单粗暴! [OperationContract] [WebInvoke(Method = "POST", UriTemplate = "Fun", RequestFormat = WebMessageFormat.Json, ResponseFormat = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 476
精华内容 190
关键字:

c#restful

c# 订阅