您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

C#控制台程序如何创建不需要IIS托管的HTTP Rest API

时间:2023-05-20 14:33:27  来源:今日头条  作者:山城科技峰

前言

本文是关于如何创建Rest API C#控制台应用程序的,在此之前,我们必须知道什么是RESTful api。RESTful API是一种应用程序接口(API),它使用HTTP方法请求GET、PUT、POST和DELETE数据。

RESTful API(也称为RESTfulWeb服务)基于表示状态传输(REST)技术,这是web服务开发中常用的一种体系结构风格和通信方法。

REST技术通常是更健壮的简单对象访问协议(SOAP)技术的首选,因为REST利用的带宽更少,更适合互联网使用。网站的API是允许两个软件程序相互通信的代码。API规定了开发人员编写程序从操作系统或其他应用程序请求服务的正确方式。

浏览器通常使用的REST可以看作是互联网的语言。随着云使用的增加,API正在出现以公开web服务。REST是构建允许用户连接云服务并与云服务交互的API的合理选择。RESTful API被亚马逊、谷歌、LinkedIn和Twitter等网站使用。

在本指南中,我将告诉您如何制作不需要IIS托管(自托管)Rest API的C#控制台应用程序,从在Microsoft Visual Studio从制作项目开始,直到在浏览器中进行测试。您也可以使用计算机直接遵循此说明。

 

操作步骤

创建控制台项目

使用Microsoft Visual Studio 2015等创建新的控制台项目应用程序(示例:restservice)
如下图:

 

编辑App.config

参考内容如下:

<?xml version="1.0" encoding="utf-8"?>      
<configuration>      
      
  <startup>      
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />      
  </startup>      
      
  <system.serviceModel>      
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>      
      
    <bindings>      
      <!--<wsHttpBinding>-->      
      <basicHttpBinding>      
        <binding name="basicHttp" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="01:00:00" maxBufferPoolSize="2147483647">      
          <security mode="None">      
            <!--<transport clientCredentialType="None" />-->      
          </security>      
          <!--<reliableSession enabled="true" />-->      
        </binding>      
      </basicHttpBinding>      
      <!--</wsHttpBinding>-->      
      
      <webHttpBinding>      
        <binding name="webHttp" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="01:00:00" maxBufferPoolSize="2147483647">      
          <security mode="None">      
            <!--<transport clientCredentialType="None" />-->      
          </security>      
        </binding>      
      </webHttpBinding>      
    </bindings>      
      
    <services>      
      
      <service name="restservice.Service">      
        <endpoint address ="rest" binding="webHttpBinding" bindingConfiguration="webHttp" contract="restservice.IService" behaviorConfiguration="web"></endpoint>      
        <host>      
          <baseAddresses>      
            <add baseAddress="http://localhost:8080" />      
          </baseAddresses>      
        </host>      
      </service>      
    </services>      
      
    <behaviors>      
      <serviceBehaviors>      
        <behavior name="mexBehaviour">      
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />      
          <!-- rest api-->      
          <serviceDebug includeExceptionDetailInFaults="false"/>      
        </behavior>      
      </serviceBehaviors>      
      
      <endpointBehaviors>      
        <behavior name="web">      
          <webHttp/>      
        </behavior>      
      </endpointBehaviors>      
    </behaviors>      
  </system.serviceModel>      
      
      
  <runtime>      
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">      
      <dependentAssembly>      
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />      
        <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />      
      </dependentAssembly>      
    </assemblyBinding>      
  </runtime>      
</configuration>    

创建IService

如下接口类的C#代码:

using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Runtime.Serialization;    
using System.ServiceModel;    
using System.ServiceModel.Web;    
using System.Text;    
    
namespace restservice    
{    
    [ServiceContract]    
    public interface IService    
    {    
        [OperationContract]    
        [WebInvoke(Method = "GET",    
             ResponseFormat = WebMessageFormat.Json,    
             BodyStyle = WebMessageBodyStyle.Wrapped,    
             UriTemplate = "login/{username}/{password}")]    
        [return: MessageParameter(Name = "Data")]    
        USER DoLogin(string username, string password);    
    }    
    
        
    public class USER    
    {    
        public string username { get; set; }    
        public string password { get; set; }    
        public string firstname { get; set; }    
        public string lastname { get; set; }    
    }    
}   

添加引用

如果出现任何错误,请添加引用。您需要添加如下库的引用:

 

创建Service方法

我们需要创建一个函数来返回请求。我们将创建一个名为Service的新文件,内容如下所示:

using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Text;    
using System.Threading.Tasks;    
    
namespace restservice    
{    
    public class Service : IService    
    {    
        public USER DoLogin(string user, string pass)    
        {    
            try    
            {    
                USER data = new USER();    
    
                if (user == "camellabs" && pass == "camellabs")    
                {    
                    data.username = user;    
                    data.password = pass;    
                    data.firstname = "ecco";    
                    data.lastname = "suprastyo";    
                }    
    
                return data;    
            }    
            catch (Exception ex)    
            {    
                return null;    
            }    
        }    
    }    
}   

编辑Program类

Program类是一个控制台应用程序,它是启动应用程序的主要入口点。它使用WebHostBuilder实例配置并启动web API主机和web服务器。按如下方式编辑Program类:

using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.ServiceModel;    
using System.ServiceModel.Description;    
using System.ServiceModel.Web;    
using System.Text;    
using System.Threading.Tasks;    
    
namespace restservice    
{    
    class Program    
    {    
        static void Main(string[] args)    
        {    
            WebServiceHost hostWeb = new WebServiceHost(typeof(restservice.Service));    
            ServiceEndpoint ep = hostWeb.AddServiceEndpoint(typeof(restservice.IService), new WebHttpBinding(), "");    
            ServiceDebugBehavior stp = hostWeb.Description.Behaviors.Find<ServiceDebugBehavior>();    
            stp.HttpHelpPageEnabled = false;    
            hostWeb.Open();    
    
            Console.WriteLine("Service Host started @ " + DateTime.Now.ToString());    
    
            Console.Read();    
        }    
    }    
}    

运行程序

在Microsoft Visual Studio 2015中以调试或发布模式运行应用程序。
测试应用程序(如果已经在浏览器中运行),如下所示:

 



Tags:C#   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
CefSharp是一个基于Chromium的开源.NET库,可以在C#应用程序中嵌入Web浏览器。以下是使用CefSharp内嵌网页的步骤: 1. 安装CefSharp NuGet包:在Visual Studio中打开NuGet包管理...【详细内容】
2023-05-22  Tags: C#  点击:(1)  评论:(0)  加入收藏
前言本文是关于如何创建Rest API C#控制台应用程序的,在此之前,我们必须知道什么是RESTful api。RESTful API是一种应用程序接口(API),它使用HTTP方法请求GET、PUT、POST和DELETE...【详细内容】
2023-05-20  Tags: C#  点击:(0)  评论:(0)  加入收藏
C# 委托(Delegate)是一种将方法作为参数传递的类型,可以用于实现回调函数、事件处理程序等。委托类型定义了方法的签名,可以将符合该签名的任何方法赋值给该委托变量。在 C# 中,...【详细内容】
2023-04-06  Tags: C#  点击:(58)  评论:(0)  加入收藏
C#的应用也比较多,有时候,我们想要研究一下别人的优秀的项目,可能会借助一些非常规手段来学习。下面,我就分享几款开源的C#反编译工具。dnSpydnSpy 是一个用C#开发,开源的调试器...【详细内容】
2023-03-30  Tags: C#  点击:(77)  评论:(0)  加入收藏
XML文件内容 xml操作代码示例:using System.Collections;using System.Data;using System.Xml;using System.Xml.XPath;namespace xmltest{ public partial class Form1 :...【详细内容】
2023-03-22  Tags: C#  点击:(68)  评论:(0)  加入收藏
昨天被骂惨了!因为我写了一个C#父窗体控制子窗体的方法,我把modifiers属性改成了public。本来只是说一下有这么个属性,没想到引起了这顿喷哈哈,虚心接受,感谢朋友们的支持。我错...【详细内容】
2023-03-09  Tags: C#  点击:(70)  评论:(0)  加入收藏
一:背景前段时间在训练营上课的时候就有朋友提到一个问题,为什么 Windbg 附加到 C# 程序后,程序就处于中断状态了?它到底是如何实现的?其实简而言之就是线程的远程注入,这一篇就展...【详细内容】
2023-01-04  Tags: C#  点击:(84)  评论:(0)  加入收藏
一:背景1. 讲故事前些天看到一个奇怪的 Function 函数,调用的是 C# 链接库中的一个 UserLogin 方法,参考代码如下:CREATE FUNCTION dbo.clr_UserLogin( @name AS NVARCHAR(1...【详细内容】
2023-01-03  Tags: C#  点击:(85)  评论:(0)  加入收藏
作者 | 苏宓出品 | CSDN(ID:CSDNnews)如果说此前 Kotlin、Dart、Julia、Carbon 等后起之秀向老牌编程语言发起挑战进攻都是小打小闹,那么这一次 C、C++ 这几种常青藤编程语言则...【详细内容】
2022-11-15  Tags: C#  点击:(119)  评论:(0)  加入收藏
上升沿和下降沿在我们开发上位机时使用率非常高,常见于消息触发、脉冲归档等。但是在C#中没有类似PLC中的上升沿、下降沿那样的指令,需要我们自己编码来实现。首先我们创建一...【详细内容】
2022-09-27  Tags: C#  点击:(563)  评论:(0)  加入收藏
▌简易百科推荐
CefSharp是一个基于Chromium的开源.NET库,可以在C#应用程序中嵌入Web浏览器。以下是使用CefSharp内嵌网页的步骤: 1. 安装CefSharp NuGet包:在Visual Studio中打开NuGet包管理...【详细内容】
2023-05-22  opendotnet  今日头条  Tags:C#   点击:(1)  评论:(0)  加入收藏
前言本文是关于如何创建Rest API C#控制台应用程序的,在此之前,我们必须知道什么是RESTful api。RESTful API是一种应用程序接口(API),它使用HTTP方法请求GET、PUT、POST和DELETE...【详细内容】
2023-05-20  山城科技峰  今日头条  Tags:C#   点击:(0)  评论:(0)  加入收藏
当我第一次开始使用 DOS 时,我喜欢 DOS 自带的 BASIC 来编写游戏和其它一些有趣的程序。很长时间后,我才学习 C 编程语言。我马上爱上了使用 C 语言做开发!它是一种简单易懂的...【详细内容】
2023-04-21    Linux中国  Tags: C 语言   点击:(49)  评论:(0)  加入收藏
C++自适应函数符和函数适配器是C++标准库中非常重要的概念,它们为C++程序员提供了更加灵活和高效的编程方式。自适应函数符是指一类函数对象,可以根据输入的参数类型自动推导...【详细内容】
2023-04-14  睿智的海边风浪  今日头条  Tags:C++   点击:(30)  评论:(0)  加入收藏
C++11 中新增了一种智能指针类型 unique_ptr,它是一种独占式的智能指针,用于管理动态分配的对象,并确保在其生命周期结束时正确释放资源。在使用 unique_ptr 时,指针指向的资源...【详细内容】
2023-04-08  睿智的海边风浪  今日头条  Tags:C++   点击:(35)  评论:(0)  加入收藏
第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符...【详细内容】
2023-04-03  QT教程    Tags:C   点击:(33)  评论:(0)  加入收藏
众所周知,C++ 中的string使用比较方便。关于C++ 中的string源码实现最近工作中使用C语言,但又苦于没有高效的字符串实现,字符串的拼接和裁剪都比较麻烦,而且每个字符串都需要申...【详细内容】
2023-04-02  Chadwik  今日头条  Tags:C语言   点击:(31)  评论:(0)  加入收藏
C#的应用也比较多,有时候,我们想要研究一下别人的优秀的项目,可能会借助一些非常规手段来学习。下面,我就分享几款开源的C#反编译工具。dnSpydnSpy 是一个用C#开发,开源的调试器...【详细内容】
2023-03-30  自学编程之道  今日头条  Tags:C#   点击:(77)  评论:(0)  加入收藏
定义与基本操作一级指针(或简称指针)是一个存储了一个内存地址的变量。这个变量的值可以是任何一个内存地址。指针变量可以指向任何类型的数据,包括整数、字符、字符串和结构体...【详细内容】
2023-03-23  千里马的驴  今日头条  Tags:C语言   点击:(40)  评论:(0)  加入收藏
双减后,数竞赛道受限,信竞赛道涌入不少青少年身影。然而,想要参加信息学奥赛,就得学会使用程序语言,目前国内信息学奥赛的指定语言是C++,若要在小初阶段冲刺竞赛高分,不少人首选编...【详细内容】
2023-03-23  图灵编程  今日头条  Tags:C++   点击:(76)  评论:(0)  加入收藏
站内最新
站内热门
站内头条