C# 在一个exe应用程序或者dll中启动WebApi服务。
新建一个工程在NuGet上获取WebApi相关组件:
创建WebApi服务:
using System.Web.Http;
using System.Web.Http.SelfHost;
public class WebApiHost
{
public static bool isHostStart = false;
public static HttpSelfHostServer _hostServer = null;
public static void CreateWebHost(string Ip,int Port)
{
if (_hostServer == null)
{
try
{
string url = string.Format("http://{0}:{1}", Ip, Port);
var config = new HttpSelfHostConfiguration(url);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
_hostServer = new HttpSelfHostServer(config);
_hostServer.OpenAsync().Wait();
isHostStart = true;
}
catch (Exception ex)
{
}
}
}
}
调用启动WebApi服务:
public MainWindow()
{
InitializeComponent();
WebApiHost.CreateWebHost("192.168.21.72", 12345);
}
用网页访问:
除了用网页直接访问,在其他应用程序中创建Http链接访问该WebApi接口的方法如下:
// Get请求
public static T GetResponse<T>(string url, int iWaitTime = 3000)
//where T : class, new()
{
try
{
if (url.StartsWith("https"))
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
}
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.GetAsync(url, HttpCompletionOption.ResponseContentRead).Result;
if (response != null && response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
if (!t.Wait(iWaitTime))
{
return default(T);
}
return JsonConvert.DeserializeObject<T>(t.Result);
}
return default(T); ;
}
catch (Exception ex)
{
return default(T);
}
}
private void button_Click(object sender, RoutedEventArgs e)
{
string getTemp = HttpClientHelp.GetResponse<string>("http://192.168.21.72:12345/api/WebApiTest/Date");
listBox.Items.Add(getTemp);
}
效果如下: