WebApi系列知识

一、webApi项目搭建
1、新建WebApi项目

#######(1)



#######(2)

#######(3)

#######(4)

Areas – HelpPage – App_Start – HelpPageConfig.cs

查看项目属性,复制xml地址



反注释 – 更改路径,使用上图获取的xml地址:

#######(5)

App_Start – RouteConfig.cs



添加代码

routes.MapRoute(
"HelpPage", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "help", action = "Index", id = UrlParameter.Optional }, // 参数默认值
new string[] { "mvcProject.Areas.HelpPage.Controllers" }
).DataTokens.Add("Area", "HelpPage");



App_Start – WebApiConfig.cs



添加{action}



添加controller后如图:

#######(6)

########运行效果图:



2、跨域问题

Web.config

添加代码

1  <add key="cors_allowOrigins" value="*" />
2 <add key="cors_allowHeaders" value="*" />
3 <add key="cors_allowMethods" value="*" />

cors_allowOrigins 表示允许请求的网站, *表示允许所有网站请求

App_Start – WebApiConfig.cs

添加代码:

using System.Configuration;
var allowOrigins = ConfigurationManager.AppSettings["cors_allowOrigins"];
var allowHeaders = ConfigurationManager.AppSettings["cors_allowHeaders"];
var allowMethods = ConfigurationManager.AppSettings["cors_allowMethods"];
var globalCors = new System.Web.Http.Cors.EnableCorsAttribute(allowOrigins, allowHeaders, allowMethods)
{
SupportsCredentials = true
};
config.EnableCors(globalCors);

添加后如图示:



如果添加后提示System.Web.Http不存在"Cors",所以如下操作解决



#######源码:

链接:https://pan.baidu.com/s/1sw7u2I35-G3xLjfzzk2jFQ

提取码:rd55

或者微信二维码:

#########附录:webapi使用System.Web.Http.Cors配置跨域访问的几点注意事项(转自:https://blog.csdn.net/chaoyangzhixue/article/details/52251322)

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();
}
}
} 注意事项
EnableCors共三个参数分别为origins、headers和methods。origins配置允许访问的域名,多个域名以逗号分隔即可,域名一定要完整,如果是ip地址前面要加上“http”,只使用IP的话一定会失效的。参数headers配置所支持的资源。参数methods配置支持的方法,get、post、put等。如果允许任意域名、任意资源、任意方法访问自己的webapi,则三个参数全部使用星号”*”即可。
“EnableCors(“http://localhost:9012,http://192.168.1.108:9012“, ““, ““)”中的配置如果出现错误的话不会报错,而是直接禁止未出现在配置表中的资源访问。
如果使用第一种方式那么可以从配置文件中读取网站列表,如果使用第二种方式,所有的参数只能使用常量。
3、请求方式

#######http://www.cnblogs.com/landeanfen/p/5337072.html

########WebApi 接口测试工具:WebApiTestClient

参考:https://www.cnblogs.com/landeanfen/p/5210356.html

(1) 新建webApi项目:WebApiTestClient



(2) 使用NuGet安装WebApiTestClient插件



引入成功后,将向项目里面添加一些主要文件:

Scripts\WebApiTestClient.js

Areas\HelpPage\TestClient.css

Areas\HelpPage\Views\Help\DisplayTemplates\TestClientDialogs.cshtml

Areas\HelpPage\Views\Help\DisplayTemplates\TestClientReferences.cshtml

(3) 修改Api.cshtml文件

通过上述步骤,就能将组件WebAPITestClient引入进来。下面我们只需要做一件事:打开文件 (根据 Areas\HelpPage\Views\Help) Api.cshtml 并添加以下内容:

@Html.DisplayForModel("TestClientDialogs")

@Html.DisplayForModel("TestClientReferences")

添加后Api.cshtml文件的代码如下:

@using System.Web.Http
@using WebApiTestClient.Areas.HelpPage.Models
@model HelpPageApiModel
@{
var description = Model.ApiDescription;
ViewBag.Title = description.HttpMethod.Method + " " + description.RelativePath;
}
<link type="text/css" href="~/Areas/HelpPage/HelpPage.css" rel="stylesheet" />
<div id="body" class="help-page">
<section class="featured">
<div class="content-wrapper">
<p>
@Html.ActionLink("Help Page Home", "Index")
</p>
</div>
</section>
<section class="content-wrapper main-content clear-fix">
@Html.DisplayForModel()
</section>
</div>
@Html.DisplayForModel("TestClientDialogs")
@section Scripts{
<link href="~/Areas/HelpPage/HelpPage.css" rel="stylesheet" />
@Html.DisplayForModel("TestClientReferences")
}

(4) 配置读取注释的xml路径

实,通过上面的步骤,我们的项目已经可以跑起来了,也可以调用接口测试。但是,还不能读取 ///

注释里面的东西。需要做如下配置才行。

方法如下:项目属性



在xml的读取路径:在下图的HelpPageConfig.cs里面配置一句话,指定xml的读取路径



代码如下: config.SetDocumentationProvider( new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/bin/WebApiTestClient.xml")));//配置 读取注销的xml路径

(5) 添加控制器:TestChargingDataController

  /// <summary>
/// 测试API Test Client
/// </summary>
public class TestChargingDataController : ApiController
{
/// <summary>
/// 得到所有数据
/// </summary>
/// <returns>返回数据</returns>
[HttpGet]
public string GetAllChargingData()
{
return "ChargingData";
}
/// <summary>
/// 得到当前Id的所有数据
/// </summary>
/// <param name="id">参数Id</param>
/// <returns>返回数据</returns>
[HttpGet]
public string GetAllChargingData(string id)
{
return "ChargingData" + id ;
}
/// <summary>
/// Post提交
/// </summary>
/// <param name="oData">对象</param>
/// <returns>提交是否成功</returns>
[HttpPost]
public bool Post(TB_CHARGING oData)
{
return true;
}
/// <summary>
/// Put请求
/// </summary>
/// <param name="oData">对象</param>
/// <returns>提交是否成功</returns>
[HttpPut]
public bool Put(TB_CHARGING oData)
{
return true;
}
/// <summary>
/// delete操作
/// </summary>
/// <param name="id">对象id</param>
/// <returns>操作是否成功</returns>
[HttpDelete]
public bool Delete(string id)
{
return true;
}
}
/// <summary>
/// 充电对象实体
/// </summary>
public class TB_CHARGING
{
/// <summary>
/// 主键Id
/// </summary>
public string ID { get; set; }
/// <summary>
/// 充电设备名称
/// </summary>
public string NAME { get; set; }
/// <summary>
/// 充电设备描述
/// </summary>
public string DES { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CREATETIME { get; set; }
}

运行项目:http://localhost:8080/Help/Index或者http://localhost:8080/Help

效果图:

#######https://blog.csdn.net/qq_22267353/article/details/82216535

4、打包发布



添加网站:





5、80端口
  1. 如果80端口未被占用

    浏览网页服务默认端口号是80,比如http://www.abc.com和http://www.abc.com:80访问结果是一样的,所以只要输入网址即可,不用输入“:80”。

    如下图:

  2. 如果80端口被占用(这一条从网上看的不太明白???)

    如果80端口已被占用、无法修改为80端口,就需要采用从80端口的服务上写一个网页跳转至oa:

    网页内容如下:

比如:在www.abc.com的应用下建一个目录oa,然后建立一个网页index.html,代码如下:

<script>
location.href="http://www.abc.com:8080/oa";
</script>

WebApi系列知识总结的更多相关文章

  1. VS Code WebApi系列——2、jwt结合数据库校验

    Knowledge should be shared free. 我们都知道WebApi最重要的作用就是为外部服务提供相应的数据接口和服务,所以一般WebApi都会连接后台数据库,那么最重要的一件事就 ...

  2. WebApi系列~目录

    回到占占推荐博客索引 写了这个系列的文章不少了,也应该为大家写个目录了,最近很刮了很多SOA的风,很多企业都将自己的系统进行分割,通常是按模块进行拆分,为这个模块提供统一的接口提供业务服务,这不紧可以 ...

  3. Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口

    1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...

  4. 【WebApi系列】浅谈HTTP

    [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...

  5. 【WebApi系列】详解WebApi如何传递参数

    WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...

  6. 【WebApi系列】浅谈HTTP在WebApi开发中的运用

    WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...

  7. ASP.NET Core 2.2 WebApi 系列【九】使用SignalR (作者:tenghao510 ) 学习及内容补充

    原文地址:  ASP.NET Core 2.2 WebApi 系列[九]使用SignalR 今天,看到了大牛的这篇博文,  发了一下评论, 我很惊喜, 没想到他很快就回复了我,  而且通过QQ帮助了S ...

  8. 通俗化理解Spring3 IoC的原理和主要组件(spring系列知识二总结)

    ♣什么是IoC? ♣通俗化理解IoC原理 ♣IoC好处 ♣工厂模式 ♣IoC的主要组件 ♣IoC的应用实例 ♣附:实例代码 1.什么是IoC(控制反转)? Spring3框架的核心是实现控制反转(Io ...

  9. WebApi系列(从.Net FrameWork 到 .Net Core)

    一. 简介  1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...

随机推荐

  1. JS拖拽系列--多元素拖拽,面向对象,es6拖拽

    最近不太忙,终于有时间,研究了一下早就想搞定的拖拽系列,先是写了面向过程式的,再做一个面向对象的,再顺便弄弄继承,最后玩一下ES6的class  不觉用了一天多,收获很大.拖拽弄完,想再弄一个拖放. ...

  2. java学习笔记(5)多线程

    一.简介(过段时间再写,多线程难度有点大) --------------------------------------- 1.进程:运行时的概念,运行的应用程序 2.线程:应用程序内部并发执行的代码 ...

  3. js的小练习

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. java线程间的通讯

    主要通过wait()和notify()方法进行线程间的通讯 class Product extends Thread{ String name; float price; boolean flag = ...

  5. symfony学习笔记——路由

    symfony的路由其实就是通过url映射到控制器的一个设置 _test:    path: /test/{type}/{page} methods: [GET]    defaults: {_con ...

  6. 主流NoSQL数据库的分析与选择

    一因为新的数据项目的数据量级较大,因此考虑将mysql替换更高性能的数据库. 介绍一下NoSQL(不仅仅是关系型数据库)的不同种类和其擅长的业务. NoSQL的一个比较明显的特点是适用于现代大数据的存 ...

  7. D Merge Equals Educational Codeforces Round 42 (Rated for Div. 2) (STL )

    D. Merge Equals time limit per test2 seconds memory limit per test256 megabytes inputstandard input ...

  8. Spring + Mybatis 企业应用实战 第1章 Java EE应用

    Java EE应用的分层模型: Domain Object 领域对象层.就是一些pojo. DAO(data access object) 数据访问对象 Service 业务逻辑层 Controlle ...

  9. 02/Oct/2019:11:55:28 类型的时间转换为

    public static String upDataTime(String time) { Date upTime = new Date(); String newtime = null; Simp ...

  10. QT程序在发布的时候应注意的地方

    ---恢复内容开始--- 我们用QT开发好的应用程序,如果要发布到其他计算机上运行怎么办呢?我们在用VC编程时,单独运行编译好的可执行文件时,经常会发现提示缺少动态库.用QT编程也不例外,在一定程度上 ...