[入门一]C# webApi创建、与发布、部署、api调用

这篇具有很好参考价值的文章主要介绍了[入门一]C# webApi创建、与发布、部署、api调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.创建web api项目

1.1、项目创建

c# webapi,c# Web API实例

c# webapi,c# Web API实例

c# webapi,c# Web API实例

c# webapi,c# Web API实例

MVC架构的话,它会有view-model-control三层,在web api中它的前端和后端是分离的,所以只在项目中存在model-control两层

c# webapi,c# Web API实例

1.2、修改路由

打开App_Start文件夹下,WebApiConfig.cs ,修改路由,加上{action}/ ,这样就可以在api接口中通过接口函数名,来导向我们希望调用的api函数,否则,只能通过controller来导向,就可能会造成有相同参数的不同名函数,冲突。其中,{id}是api接口函数中的参数。
 

默认路由配置信息为:【默认路由模板无法满足针对一种资源一种请求方式的多种操作。】
WebApi的默认路由是通过http的方法(get/post/put/delete)去匹配对应的action,也就是说webapi的默认路由并不需要指定action的名称

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace WebAPI
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

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

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                //修改路由,加上{action}/ ,这样就可以在api接口中通过接口函数名,来导向我们希望调用的api函数,
                //否则,只能通过controller来导向,就可能会造成有相同参数的不同名函数,冲突。其中,{id}是api接口函数中的参数
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

二.测试案例

写一个测试的api函数,并开始执行(不调试)

2.1、我们在model文件夹中添加一个类movie

c# webapi,c# Web API实例

c# webapi,c# Web API实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebAPI.Models
{
    public class movie
    {

        public string name { get; set; }
        public string director { get; set; }
        public string actor { get; set; }
        public string type { get; set; }
        public int price { get; set; }



    }
}

2.1.2、我们在model文件夹中添加一个类Product

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebAPI.Models
{
    public class Product
    {

        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; }



    }
}

2.2、在controller文件夹下添加web api控制器,命名改为TestController

c# webapi,c# Web API实例

c# webapi,c# Web API实例

c# webapi,c# Web API实例

c# webapi,c# Web API实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPI.Models;

namespace WebAPI.Controllers
{
    public class TestController : ApiController
    {


        movie[] mymovie = new movie[]
        {
            new movie { name="海蒂和爷爷",director="阿兰.葛斯彭纳",actor="阿努克",type="动漫",price=28},
            new movie { name="云南虫谷",director="佚名",actor="潘粤明",type="惊悚",price=32},
            new movie { name="沙海",director="佚名",actor="吴磊",type="惊悚",price=28},
            new movie { name="千与千寻",director="宫崎骏",actor="千寻",type="动漫",price=28}
        };
        public IEnumerable<movie> GetAllMovies()
        {
            return mymovie;

        }
        public IHttpActionResult GetMovie(string name)    //异步方式创建有什么作用
        {
            var mov = mymovie.FirstOrDefault((p) => p.name == name);
            if (mymovie == null)
            {
                return NotFound();
            }
            return Ok(mymovie);
        }





    }
}

这样就完成了一个web api实例的编写

2.2.2、在controller文件夹下添加web api控制器,命名改为productsController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPI.Models;

namespace WebAPI.Controllers
{
    public class productsController : ApiController
    {

        Product[] products = new Product[]
        {
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
        };

        public IEnumerable<Product> GetAllProducts()
        {
            return products;
        }

        public IHttpActionResult GetProduct(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);
        }




    }
}

2.2.3、在controller文件夹下添加web api控制器,命名改为MyController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace WebAPI.Controllers
{
    public class MyController : ApiController
    {


        [HttpGet]
        public string MyExample(string param1, int param2)
        {
            string res = "";
            res = param1 + param2.ToString();
            //这边可以进行任意操作,比如数据存入或者取出数据库等
            return res;
        }




    }
}

三.本地调试

3.1 运行调试,以本地 localhost(或127.0.0.1)形式访问
①点击工具栏【IIS Express】

c# webapi,c# Web API实例

②浏览地址输入接口,看是否可以访问

localhost:44381/api/products/GetAllProducts

注意:

这里的路径是写你的控制器前缀名称(Control文件下的productsController控制器文件的前缀)

c# webapi,c# Web API实例

https://localhost:44381/api/Test/GetAllMovies

c# webapi,c# Web API实例

2)直接在浏览器中调试也行

c# webapi,c# Web API实例

想要调试的值,可以将WebApiConfig.cs的代码修如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace WebAPI
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

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

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                //修改路由,加上{action}/ ,这样就可以在api接口中通过接口函数名,来导向我们希望调用的api函数,
                //否则,只能通过controller来导向,就可能会造成有相同参数的不同名函数,冲突。其中,{id}是api接口函数中的参数
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );


            //去掉xml返回格式、设置json字段命名采用
            var appXmlType =
                config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
            config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);





        }
    }
}

ok,显示成功

localhost:44381/api/My/MyExample?param1=&param2=2

c# webapi,c# Web API实例

WebApi项目实例3-1

3-1 (1)新添加到控制器UserInfoController,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPI.Models;

namespace WebAPI.Controllers
{
    public class UserInfoController : ApiController
    {

        //检查用户名是否已注册
        private ApiTools tool = new ApiTools();

        //  [HttpPost]

        [HttpGet]
        public HttpResponseMessage CheckUserName(string _userName)
        {
            int num = UserInfoGetCount(_userName);//查询是否存在该用户
            if (num > 0)
            {
                return tool.MsgFormat(ResponseCode.操作失败, "不可注册/用户已注册", "1 " + _userName);
            }
            else
            {
                return tool.MsgFormat(ResponseCode.成功, "可注册", "0 " + _userName);
            }
        }

        private int UserInfoGetCount(string username)
        {
            //return Convert.ToInt32(SearchValue("select count(id) from userinfo where username='" + username + "'"));
            return username == "admin" ? 1 : 0;
        }





    }
}

添加返回(响应)类ApiTools

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Web;

namespace WebAPI.Models
{
    //添加返回(响应)类
    public class ApiTools
    {
        private string msgModel = "{{\"code\":{0},\"message\":\"{1}\",\"result\":{2}}}";
        public ApiTools()
        {
        }
        public HttpResponseMessage MsgFormat(ResponseCode code, string explanation, string result)
        {
            string r = @"^(\-|\+)?\d+(\.\d+)?$";
            string json = string.Empty;
            if (Regex.IsMatch(result, r) || result.ToLower() == "true" || result.ToLower() == "false" || result == "[]" || result.Contains('{'))
            {
                json = string.Format(msgModel, (int)code, explanation, result);
            }
            else
            {
                if (result.Contains('"'))
                {
                    json = string.Format(msgModel, (int)code, explanation, result);
                }
                else
                {
                    json = string.Format(msgModel, (int)code, explanation, "\"" + result + "\"");
                }
            }
            return new HttpResponseMessage { Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") };
        }
    }


    public enum ResponseCode
    {
        操作失败 = 00000,
        成功 = 10200,
    }



}

3-1 (2)本地调试,调用Web API接口

运行调试,以本地 localhost(或127.0.0.1)形式访问
①点击工具栏【IIS Express】

②浏览地址输入接口,看是否可以访问

https://localhost:44381/api/UserInfo/CheckUserName?_userName=wxd

c# webapi,c# Web API实例

c# webapi,c# Web API实例

3.2 运行调试,以本地IP(192.168.6.152)形式访问
127.0.0.1是回路地址,来检验本机TCP/IP协议栈,实际使用过程中服务端不在本机,是外部地址,要用IP地址测试。
外部用户采用IP+端口号访问,如下图浏览器访问不了,400错误。
 

c# webapi,c# Web API实例

解决方案:

因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改。

以管理员身份运行命令行【此处不要操作】

C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers

c# webapi,c# Web API实例

c# webapi,c# Web API实例

如果modules也被锁定,再运行

C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/modules

c# webapi,c# Web API实例

客户端程序:调用接口分为以下几种情况:
通过Javascript 和 jQuery 调用 Web API
右键资源管理器解决方案下面的项目,添加-新建项

c# webapi,c# Web API实例

将index.html内容替换成:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Product App</title>
</head>
<body>

    <div>
        <h2>All Products</h2>
        <ul id="products" />
    </div>
    <div>
        <h2>Search by ID</h2>
        <input type="text" id="prodId" size="5" />
        <input type="button" value="Search" onclick="find();" />
        <p id="product" />
    </div>

    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
    <script>
    var uri = 'api/Products';

    $(document).ready(function () {
      // Send an AJAX request
      $.getJSON(uri)
          .done(function (data) {
            // On success, 'data' contains a list of products.
            $.each(data, function (key, item) {
              // Add a list item for the product.
              $('<li>', { text: formatItem(item) }).appendTo($('#products'));
            });
          });
    });

    function formatItem(item) {
      return item.Name + ': $' + item.Price;
    }

    function find() {
      var id = $('#prodId').val();
      $.getJSON(uri + '/' + id)
          .done(function (data) {
            $('#product').text(formatItem(data));
          })
          .fail(function (jqXHR, textStatus, err) {
            $('#product').text('Error: ' + err);
          });
    }
    </script>
</body>
</html>

四.发布web api 并部署

4.1、首先,右键项目,选择发布:

c# webapi,c# Web API实例

c# webapi,c# Web API实例

c# webapi,c# Web API实例

c# webapi,c# Web API实例

c# webapi,c# Web API实例

到这里,程序已经发布到指定的路径下了(这里的路径,可以是本机的文件夹,也可以是服务器上的ftp路径)

4.2、我们还剩最后一步,就是,在IIS上,把发布的服务端程序挂上去,不说了,直接上图:
打开iis,选中网站,右键 添加网站, 

c# webapi,c# Web API实例

c# webapi,c# Web API实例

 好了,服务端程序发布并部署完成。

这个WebAPI就是刚刚我们部署好的,点击下图右侧的浏览*91(http),会打开网页

c# webapi,c# Web API实例文章来源地址https://www.toymoban.com/news/detail-753865.html

到了这里,关于[入门一]C# webApi创建、与发布、部署、api调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# iis WebAPI无法调用CngKey模块

    报错:找不到指定文件 解决方式:给Web.config文件中增加管理员权限配置 identity impersonate=\\\"true\\\" userName=\\\"Administrator\\\" password=\\\"password\\\" / 示例: 在此示例中,我们将identity元素添加到system.web元素中,并设置\\\"impersonate\\\"属性为\\\"true\\\",表示应用程序将使用指定的用户名和密码模拟管理员

    2024年02月12日
    浏览(43)
  • C# WebService&WebApi接口项目创建

    注意勾选红框项,默认是不勾选的,否则创建新项目时会找不到ASP.NET Web应用程序(.NET Framework)的模板。 0.demo源码获取:https://gitee.com/xiuhuang/webservice_demo 1.创建新项目,选择ASP.NET Web应用程序(.NET Framework)。 2.点击下一步,到这个页面时选择空。 3.选中项目右键,添加-新建项,

    2024年02月05日
    浏览(44)
  • 【C#】WebAPI,在Windows IIS平台部署

    目录 前言 一、技术介绍 1.1 IIS概念 1.2 WebApi概念 二、部署准备 2.1 Visual Studio本地项目配置 2.2 运行调试,以本地 localhost(或127.0.0.1)形式访问 2.3 运行调试,以本地IP(192.168.6.152)形式访问 三、详细步骤 3.1 打包发布 3.2 安装IIS(Internet信息服务) 3.3 配置IIS(Internet信息服务

    2024年01月17日
    浏览(32)
  • C#调用webapi HTTPS报错:基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系--安全证书问题

    1、首先加入命名空间: using System.Net.Security; using System.Security.Authentication; using System.Security.Cryptography.X509Certificates; SSL网站,连接时需要提供证书,对于非必须提供客户端证书的情况,只要返回一个安全确认即可。我的是.NET FrameWork4.0 2、加入以下代码: 3、接收证书进行身份验

    2024年02月13日
    浏览(33)
  • C#桌面程序(winform)如何一步步集成内置WebApi(owin技术),解耦IIS,并将Api接收信息推给桌面窗体控件展示

    最近工厂有个需求,服务器上部署了一个服务,此服务要把信息推送给现场多台工控机上的CS上位机程序。由于涉及到多个软件之间的通信,做架构时,首先排除掉中间表形式,从效率和稳定性上也排除掉了Socket,最后采用了WebApi接口形式来做通信。但是有个问题,上位机程

    2023年04月08日
    浏览(31)
  • C# webAPI 精解

    先创建一个web项目 基本可以运行的程度 用postman进行接口测试 .NET Framework 和 .NET Core 都可以创建 webAPI 这里用 .NET Framework 比较简单 。 启动 Visual Studio,并从“开始”页中选择“新建项目”。 或者,在 “文件” 菜单中,选择“ 新建 ”,然后选择“ 项目”。 在 “模板 ”窗格

    2024年02月09日
    浏览(35)
  • C# webapi 参数(AI)

    在C# WebAPI中,参数是用于接收和处理HTTP请求中传递的数据的方式。WebAPI支持不同类型的参数,包括路由参数、查询字符串参数、请求体参数和标头参数。以下是一些常用的WebAPI参数类型: 路由参数(Route Parameters): 路由参数从URL的路径中提取值。在WebAPI中,通常使用路由模

    2024年02月15日
    浏览(30)
  • C# WebApi传参及Postman调试

    欢迎来到本文,本篇文章将会探讨C# WebApi中传递参数的方法。在WebApi中,参数传递是一个非常重要的概念,因为它使得我们能够从客户端获取数据,并将数据传递到服务器端进行处理。WebApi是一种使用HTTP协议进行通信的RESTful服务,它可以通过各种方式传递参数。在本文中,

    2024年04月15日
    浏览(22)
  • c# WebApi的搭建和调试(超级简单)

    1.首先新建一个ASP.NET应用程序。 2.在新建ASP.NET项目界面,按照如下步骤进行。 点击确定后,后续那个让你使用Azure的界面直接取消即可。 3.新建后的界面如下   鼠标右击Controllers 文件夹,在添加项后面选择控制器。 选择如下控制器,点击添加按钮。 根据需求修改名称( 后

    2023年04月22日
    浏览(23)
  • .NET WebApi 发布到服务器(windows)并开放端口

    目录 1.前言 2.发布前的准备 3.打包发布(交叉编译) 3.1更改生成xml文件的设置 3.2进入WebApi项目,右键发布 3.3发布设置------勾选在发布前删除现有文件 4.发送件至服务器 5.服务器安装对应环境 5.1安装IIS 5.2安装Hosting Bundle 6.发布 7.配置端口 8.各类报错 8.1    500.19 Internal Server

    2024年04月12日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包