WebApi系列知識總結


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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM