使用OWIN作为WebAPI的宿主

前言

好吧,也没什么好说的,就是个技术的总结,直接生成MVC的项目,感觉好重,虽然各种东西很全 ...也许我是处女座? - -,

OWIN呃,这里我就不解释了,自己也是一知半解,可以参考

Open Web Interface for .NET

我们开始吧...

首先看看结果..

整个WEB项目...很清爽.. - - 我自己是这么觉得的..

正文开始

首先我们创建一个空的Web项目:

创建完成后,里面是什么都没有的,然后我们添加一个OWIN启动类如下:

在我们的Start UP中编写代码如下(解释我就写在注释里了..):

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
using System.Web.Http;

[assembly: OwinStartup(typeof(OWIN_Test.MyStartup))]

namespace OWIN_Test
{
    public class MyStartup
    {
        public void Configuration(IAppBuilder app)
        {
            //创建一个HTTP的实例配置
            HttpConfiguration config = new HttpConfiguration();
            //映射路由
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            //将配置注入OWIN管道中
            app.UseWebApi(config); 
        }
    }
}

这一步有个重点,那就是app.UseWebApi(config)这个方法会提示找不到,如下图:

那是因为我们缺少了这个包 Microsoft ASP.NET Web API 2 OWIN Self-Host 

我们打开NuGet控制台..输入命令:Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

等待下载和安装完毕即可..效果如下:

下面我们编写一个WebAPI的控制器,代码如下(代码很简单,我就不解释了):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace OWIN_Test.Controller
{
    public class ValuesController : ApiController
    {
        [HttpGet]
        public string DoGetTime(string name)
        {
            return name + DateTime.Now.ToString("yyyy-MM-dd");
        }
    }
}

编写HTML,这里我们采用AJAX访问.代码如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="JS/jquery/jquery-1.9.1.min.js"></script>
    <script>
        $(function () {
            $("#testbtn").click(function () {
                
                $.get("api/Values/DoGetTime", { name: $("#name").val() }, function (data) {
                    alert(data);

                })


            })
        })
    </script>
</head>
<body>
    <input type="text"  id="name"/>
    <input id="testbtn" type="button"  value="调用WebAPI"/>
</body>
</html>

效果如下:

我们得到了我们想要的数据..

写在最后

在Web项目中直接创建webapi的项目其实可以很快的达到效果,..个人不是很喜欢自带的Webapi模版感觉很蛋疼加了很多用不着的东西,采用OWIN当宿主可以将项目架设在服务,控制台等,当然~你用MVC6甚至..可以跨平台部署~...很方便...文章结束.

不足之处请各位大神多多指点.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iOSDevLog

调试目录

2637
来自专栏liulun

分享我用Qt开发的应用程序【二】在Qt应用程序中使用字体图标fontawesome

为了使用简单,需要先写一个单件类,头文件的代码如下: 其中静态方法Instance保证IconHelper的实例全局唯一 (注意构造函数已经私有化了) #if...

1997
来自专栏葡萄城控件技术团队

七天学会ASP.NET MVC(七)——创建单页应用

系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 ...

2816
来自专栏向治洪

React Native导航器之react-navigation使用

在上一节Navigation组件,我们使用系统提供的导航组件做了一个跳转的例子,不过其实战能力不强,这里推荐一个超牛逼的第三方库:react-navigatio...

1.2K7
来自专栏宏伦工作室

解放你的双手,陪爸妈看春晚去!

1282
来自专栏葡萄城控件技术团队

ASP.NET MVC 5 - 给电影表和模型添加新字段

在本节中,您将使用Entity Framework Code First来实现模型类上的操作。从而使得这些操作和变更,可以应用到数据库中。 默认情况下,就像您在...

1948
来自专栏Python中文社区

多线程爬取斗图网站,赶紧上车

專 欄 ? ❈致Great,Python中文社区专栏作者 博客: http://www.jianshu.com/u/261e23a40f71 ❈ 最近看了Py...

19610
来自专栏AhDung

【C#】分享带等待窗体的任务执行器一枚

-------------20150415原文(已更新)-------------

733
来自专栏dotnet core相关

讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性,今天主角就是 ApiControllerAttribute. (注:文...

942
来自专栏DOTNET

ASP.NET Web API编程——控制器

1控制器操作的参数 控制器操作的参数可以是内置类型也可以是自定义类型,无参也是允许的。 2控制器操作返回值 类型 说明 void ...

3035

扫码关注云+社区