『壹』 webAPI如何實現整體攔截
e things go wrong Love is meant to be a spirit that
『貳』 net webapi 能不能使用mvc的過濾器
這個很有用的,13個擴展點中過濾器占重要的地位。自定義身份驗證、自定義post表單時自動檢測錯誤、自定義發生異常時的自動化處理、等等應用。一定要搞明白的。
『叄』 webapi介面監控工具有哪些
先定義一個簡單的webapi,簡單到差不多直接用vs2010自動生成的webapi代碼。 其中的TestModle是一個簡單專的class,如下 public class TestModle { public string a { get; set; } public string b { get; set; } public string c { get; set; } } 屬前端頁面放四個代表get,post,put,delete的按鈕,在加一個div顯示返回值 前端代碼中載入jquery,在定義四個按鈕的click事件 get和post,我習慣用$.get和$.post,當然也能用$.ajax. get直接返回webapi get的return值,post的話我就不在後端做處理了直接返回傳入的值,這里只做示範 put和delete,只能用$.ajax來處理。 put的話一般用於update某個id的數據信息 delete用於刪除某個id的數據,如下圖所示 點擊每個按鈕,可以在頁面上看到相應的效果
『肆』 c# webapi中優先過濾post參數(求代碼實例)
用 if(sign滿足){return 處理後結果} return 默認信息 就可以了
『伍』 .net core中如何在執行action前植入一個webapi過濾器
新建一個MyFilter.cs
public class MyFilter: Attribute,IAuthorizationFilter
實現 OnAuthorization 驗證
public class MyFilter : Attribute,IActionFilter,IOrderedFilter
實現 OnActionExecuted(請求方法後)和專 OnActionExecuting(請求方法前)
Startup.cs中ConfigureServices方法中 注冊屬此MyFilter.cs
services.AddMvc(config => config.Filters.Add(new MyFilter()));
『陸』 如何在webapi中使用filter
在webapi項目中新建一個MyTestFilter類
這里需要重寫兩個方法
OnActionExecuting 執行前調用
OnActionExecuted 執行後調用
可以把aop操作寫在相應的方法中
這里就不解釋具體的aop操作了,只演示一下在方法中獲得可能用到的參數
如果要在filter中獲得 public string Get(string id)中的id
public override void OnActionExecuting(HttpActionContext actionContext)
actionContext.ActionArguments["id"] 或 actionContext.ActionArguments.TryGetValue("id", out data)
在filter中獲得最終的返回值
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
var objectContent = actionExecutedContext.Response.Content as ObjectContent;
var value = objectContent.Value
然後再webapi項目中隨便哪個帶參數的get上加[MyTestFilter]
『柒』 WebAPI與傳統的WebService有哪些不同
WebService是利用HTTP管道實現了RPC的一種規范形式,放棄了對HTTP原生特徵與語義的完備支持;而WebAPI是要保留HTTP原生特徵與語義的同時實現RPC,但WebAPI的實現風格可以是千姿百態,RESTful只是實現了其中一種風格,你也可以定義一種風格,並實現
WebAPI相比WebService更為輕量級、靈活、優化好的情況下,性能更有優勢,但是對復雜或大型業務的描述與使用增加了無形的成本
WebAPI可以更好的利用HTTP與生俱來的特徵,如:緩存、代理、安全、頭信息擴展,反之,部分實現方式WebService無法利用HTTP特徵
本質上WebAPI與傳統模式的WebService都是實現RPC,遠程服務;傳統的WebService只是利用了HTTP通道,進行獨立的交互,但是這個交互協議可以移植到其他協議下運作,而WebAPI天生與HTTP依賴無法移植
WebService與WebAPI在80埠下工作,都可以繞開默認的網路防火牆限制,因為默認下網路防火牆對系統級埠與協議下的內容是開放的
WebService與RESTfulWebAPI服務端都可以使用反射來實現自動化部署,只是前者更為容易,因為存在標準的規范,後者只是開發WebAPI的推薦風格,實現上需要自己來規范與描述,處理不兼容問題;WebAPI在無反射下的業務實現更為直觀接近MVC模式下的開發的應用,通用,性能更好、更為靈活,能夠直接利用HTTP的動態網頁技術開發介面與功能
WebAPI對於交互數據的格式沒有明確規定,使得其可以更好的使用在特定的軟體運行平台,但是需要開發者對各種格式的支持;傳統的WebService則要求使用服務的平台對數據格式強制適應,服務端的交互數據處理變得更加快捷容易,而增加了不同使用端的對服務交互困難度
『捌』 webapi filter 每一個請求都是相同的實例嗎
在webapi項目中新建一個MyTestFilter類 這里需要重寫兩個方法 OnActionExecuting 執行前調用 OnActionExecuted 執行後調用 可以回把aop操作寫在相應答的方法中 這里就不解釋具體的aop操作了,
『玖』 如何使 WebAPI 自動生成漂亮又實用在線API文檔
1.1 SwaggerUI
SwaggerUI 是一個簡單的Restful API 測試和文檔工具。簡單、漂亮、易用(官方)。通過讀取JSON 配置顯示API. 項目本身僅僅也只依賴一些 html,css.js靜態文件. 你可以幾乎放在任何Web容器上使用。
1.2 Swashbuckle
Swashbuckle 是.NET類庫,可以將WebAPI所有開放的控制器方法生成對應SwaggerUI的JSON配置。再通過SwaggerUI 顯示出來。類庫中已經包含SwaggerUI 。所以不需要額外安裝。
2.快速開始
創建項目 OnlineAPI來封裝網路音樂服務(示例下載) ,通過API可以搜索、獲取音樂的信息和播放連接。
我盡量刪除一些我們demo中不會用到的一些文件,使其看上去比較簡潔。
WebAPI 安裝 Swashbuckle
Install-Package Swashbuckle
代碼注釋生成文檔說明。
Swashbuckle 是通過生成的XML文件來讀取注釋的,生成 SwaggerUI,JSON 配置中的說明的。
安裝時會在項目目錄 App_Start 文件夾下生成一個 SwaggerConfig.cs 配置文件,用於配置 SwaggerUI 相關展示行為的。如圖:
將配置文件大概99行注釋去掉並修改為
c.IncludeXmlComments(GetXmlCommentsPath(thisAssembly.GetName().Name));
並在當前類中添加一個方法
/// <summary>
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
protected static string GetXmlCommentsPath(string name)
{
return string.Format(@"{0}\bin\{1}.XML", AppDomain.CurrentDomain.BaseDirectory, name);
}
緊接著你在此Web項目屬性生成選卡中勾選 「XML 文檔文件」,編譯過程中生成類庫的注釋文件
添加網路音樂 3個API
訪問 http://<youhost>/swagger/ui/index,最終顯示效果
我們通過API 測試API 是否成功運行
3.添加自定義HTTP Header
在開發移動端 API時常常需要驗證許可權,驗證參數放在Http請求頭中是再好不過了。WebAPI配合過濾器驗證許可權即可
首先我們需要創建一個 IOperationFilter 介面的類。IOperationFilter
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Http.Description;
using System.Web.Http.Filters;
using Swashbuckle.Swagger;
namespace OnlineAPI.Utility
{
public class HttpHeaderFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry
schemaRegistry, ApiDescription apiDescription)
{
if (operation.parameters == null) operation.parameters = new
List<Parameter>();
var filterPipeline =
apiDescription.ActionDescriptor.GetFilterPipeline();
//判斷是否添加許可權過濾器
var isAuthorized = filterPipeline.Select(filterInfo =>
filterInfo.Instance).Any(filter => filter is IAuthorizationFilter);
//判斷是否允許匿名方法
var allowAnonymous =
apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
if (isAuthorized && !allowAnonymous)
{
operation.parameters.Add(new Parameter
{
name = "access-key",
@in = "header",
description = "用戶訪問Key",
required = false,
type = "string"
});
}
}
}
}
在 SwaggerConfig.cs 的 EnableSwagger 配置匿名方法類添加一行注冊代碼
c.OperationFilter<HttpHeaderFilter>();
添加Web許可權過濾器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Http;
using System.Web.Http.Controllers;
using Newtonsoft.Json;
namespace OnlineAPI.Utility
{
/// <summary>
///
/// </summary>
public class AccessKeyAttribute : AuthorizeAttribute
{
/// <summary>
/// 許可權驗證
/// </summary>
/// <param name="actionContext"></param>
/// <returns></returns>
protected override bool IsAuthorized(HttpActionContext actionContext)
{
var request = actionContext.Request;
if (request.Headers.Contains("access-key"))
{
var accessKey = request.Headers.GetValues("access-key").SingleOrDefault();
//TODO 驗證Key
return accessKey == "123456789";
}
return false;
}
/// <summary>
/// 處理未授權的請求
/// </summary>
/// <param name="actionContext"></param>
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
var content = JsonConvert.SerializeObject(new {State = HttpStatusCode.Unauthorized});
actionContext.Response = new HttpResponseMessage
{
Content = new StringContent(content, Encoding.UTF8, "application/json"),
StatusCode = HttpStatusCode.Unauthorized
};
}
}
}
在你想要的ApiController 或者是 Action 添加過濾器
[AccessKey]
最終顯示效果
4.顯示上傳文件參數
SwaggerUI 有上傳文件的功能和添加自定義HTTP Header 做法類似,只是我們通過特殊的設置來標示API具有上傳文件的功能
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Description;
using Swashbuckle.Swagger;
namespace OnlineAPI.Utility
{
/// <summary>
///
/// </summary>
public class UploadFilter : IOperationFilter
{
/// <summary>
/// 文件上傳
/// </summary>
/// <param name="operation"></param>
/// <param name="schemaRegistry"></param>
/// <param name="apiDescription"></param>
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (!string.IsNullOrWhiteSpace(operation.summary) && operation.summary.Contains("upload"))
{
operation.consumes.Add("application/form-data");
operation.parameters.Add(new Parameter
{
name = "file",
@in = "formData",
required = true,
type = "file"
});
}
}
}
}
在 SwaggerConfig.cs 的 EnableSwagger 配置匿名方法類添加一行注冊代碼
c.OperationFilter<UploadFilter>();
API 文檔展示效果