webapi獲取文件上傳
『壹』 如何使 WebAPI 自動生成漂亮又實用在線API文檔
1.1 SwaggerUI
SwaggerUI 是一個簡單的Restful API 測試和文檔工具。簡單、漂亮、易用(官方demo)。通過讀取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 文檔展示效果
『貳』 webapi實行文件轉換調用報500錯誤
一般是程序運行異常了導致500,你在代碼里try catch一下把錯誤日誌打出來基本就知道問題了。webapi是運行在w3wp進程里的,所以許可權與你直接運行exe時不同,有可能是許可權問題導致異常
『叄』 .NET6 WebApi快速部署到Linux系統
.NET6 WebApi快速部署到Linux系統
要將.NET6 WebApi快速部署到Linux系統,可以通過以下步驟實現。這里我們將使用寶塔面板(BT Panel)作為伺服器管理工具,它提供了圖形化界面,方便我們進行環境配置和項目部署。
一、安裝寶塔面板
啟動寶塔面板:
首先,你需要在Linux伺服器上安裝寶塔面板。可以通過SSH連接到你的伺服器,並執行寶塔面板的安裝命令。具體安裝命令可以在寶塔官網找到,通常是一個包含腳本的URL,執行該URL即可開始安裝。
登錄寶塔面板:
安裝完成後,你可以在瀏覽器中訪問你的伺服器IP地址加上寶塔面板的默認埠(通常是8888),然後輸入安裝時設置的用戶名和密碼進行登錄。
二、安裝.NET環境
安裝.NET環境管理器:
登錄寶塔面板後,在左側菜單中找到「軟體商店」,然後在「運行環境」中找到「.NET」並安裝。這將安裝.NET環境管理器,允許你在寶塔面板中管理多個.NET版本。
安裝.NET 6:
在.NET環境管理器中,選擇你需要的.NET版本(在這里是.NET 6),然後點擊「安裝」。寶塔面板將自動下載並安裝.NET 6環境。
三、部署.NET項目
創建NET項目並上傳文件:
在寶塔面板的左側菜單中找到「網站」,然後點擊「添加站點」。在添加站點的界面中,填寫你的網站域名(如果沒有域名,可以使用伺服器IP地址)和其他相關信息,然後點擊「提交」。
站點創建完成後,進入該站點的管理界面,在「文件」選項卡中,點擊「上傳」,然後選擇你要部署的.NET6 WebApi項目的發布文件(通常是一個文件夾,包含所有編譯後的文件和配置文件)。
設置.NET版本、啟動命令和埠:
在站點管理界面中,找到「運行環境」選項卡,然後選擇你安裝的.NET版本(在這里是.NET 6)。
接著,在「啟動文件」中填寫你的項目啟動文件(通常是dotnet命令加上你的項目dll文件的名稱,例如dotnet MyApi.dll)。
最後,在「埠」中填寫你想要監聽的埠號(默認是80,但你可以根據需要更改)。
測試部署:
設置完成後,點擊「保存」按鈕。然後,在站點管理界面的「訪問」選項卡中,你可以看到你的網站訪問鏈接。點擊該鏈接,如果一切正常,你應該能夠看到你的.NET6 WebApi項目已經成功部署並運行。
通過以上步驟,你就可以將.NET6 WebApi項目快速部署到Linux系統上了。如果你遇到任何問題,可以查閱寶塔面板的官方文檔或社區論壇,那裡有許多經驗豐富的用戶可以幫助你解決問題。
『肆』 app更新機制文件如何管理
1、首先在服務端(Server)部署一個WebAPI。
2、其次在指定目錄下存放一個更新包。
3、最後接收APP發送的動態更新請求,所述動態更新請求中包括所述APP的當前安裝包的版本號即可。
『伍』 2018年10月微信小程序上傳文件的問題webapi方式
必須在微信公眾平台填寫請求,下載,上傳,websocket 域名,必須是SSL加密的