一、集成 SelfHost
现在已有的资料中,使用 SelfHost 做自宿主服务的基本都是用控制台实现 WebAPI 的功能,或者在 WinFrom 中集成。WFP 和这些还是有挺大的区别。 我这里是参考了这个文章:Self-Host
具体的步骤如下:
1. 添加引用包
在 NuGet 中添加 “Microsoft.AspNet.WebApi.SelfHost”和“Microsoft.AspNet.WebApi.Cors”库,其他依赖的类库基本都会添加进来
2. 初始化服务
新建类 “InitConfig”在类里添加初始化自宿主的一些设置。
具体代码如下:
public static HttpSelfHostConfiguration InitSelfHostConfig(string baseAddress)
{
// 配置 http 服务的路由
// 地址实例:http://10.17.125.183:8848/api/home/PostMeasuring
// 加了{action}后,一个类写多个方法
HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(baseAddress);
config.Routes.MapHttpRoute(
"API Default", "api/{controller}/{action}/{id}",
new { id = RouteParameter.Optional }
);
// 设置跨域
var cors = new EnableCorsAttribute("*", "*", "*"); //跨域允许设置
config.EnableCors(cors);
config.Formatters
.XmlFormatter.SupportedMediaTypes.Clear();
//默认返回 json
config.Formatters
.JsonFormatter.MediaTypeMappings.Add(
new QueryStringMapping("datatype", "json", "application/json"));
//返回格式选择
config.Formatters
.XmlFormatter.MediaTypeMappings.Add(
new QueryStringMapping("datatype", "xml", "application/xml"));
//json 序列化设置
config.Formatters
.JsonFormatter.SerializerSettings = new
Newtonsoft.Json.JsonSerializerSettings()
{
//NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
DateFormatString = "yyyy-MM-dd HH:mm:ss" //设置时间日期格式化
};
return config;
}
3. 添加 Program 类
WPF 默认是没有这个类的,需要自己手动添加这样的一个类。
这个类的代码:
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
string baseAddress = string.Format("http://{0}:{1}/",
System.Configuration.ConfigurationManager.AppSettings.Get("Domain"),
System.Configuration.ConfigurationManager.AppSettings.Get("APIPort"));
using (var server = new HttpSelfHostServer(InitConfig.InitSelfHostConfig(baseAddress)))
{
server.OpenAsync().Wait();
Console.WriteLine(String.Format("host 已启动:{0}", baseAddress));
//实例化主窗口
App app = new App();
app.Run();
}
}
停止运行时想要完全退出程序需要在主窗口退出时间添加这个 (原理暂未理清)
Environment.Exit(0);
其中 baseAddress 是拼接的服务地址,同时在“属性”里设置项目的启动对象为“Program”。
后面添加一些 API 进行测试。文章来源:https://www.toymoban.com/news/detail-572544.html
public class HomeController : ApiController
{
[Route("PostCCD")]
[HttpPost]
public object PostCCD([FromBody] string str)
{
return new { code = 1, success = true, msg = "成功" };
}
[Route("PostMeasuring")]
[HttpPost]
public object PostMeasuring([FromBody] string str)
{
return new { code = 1, success = true, msg = "成功" };
}
}
注:添加API后需以管理员身份运行程序文章来源地址https://www.toymoban.com/news/detail-572544.html
到了这里,关于WPF中添加webapi的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!