C#桌面程序 winform WPF集成内置WebApi C# 创建HTTP Web API服务,winform WPF项目创建HTTP WEB服务, WPF WebApi 带权限访问 展示html

      在维护旧的项目时,有时需要提供APP连接的需求,就要提供HTTP服务,winform项目就要提供HTTP服务,就不用再去写个c# web的IIS相关的业务了,简化项目的复杂度。

原先的业务get,post,请求返回文件功能全有

最新添加了权限认证的功能,业务接口只有获取正确的token后才能通信

1)验证通过后才能获取token

2)token可以设置定时过期

3)token里面可以绑定用户信息

4)展示html文件内容

最新资料下载------>   源代码资料

//这里是部分代码,动态添加token,判断token是否存在,定时处理过期的token
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Globalization;

namespace webAPIServer.Common
{
    public class UnidDo
    {
        public static Dictionary<string, JObject> unidMap = new Dictionary<string, JObject>();
        private static readonly object unid_Lock = new object();

        public static string Add(string information) {
            string result = ""; ;
            try {
                lock (unid_Lock)
                {
                    string key = Guid.NewGuid().ToString();
                    if (!unidMap.ContainsKey(key))
                    {
                        string strDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", DateTimeFormatInfo.InvariantInfo);
                        JObject json = new JObject();
                        json.Add(new JProperty("DateTime", strDate));
                        json.Add(new JProperty("information", information));
                        unidMap.Add(key, json);
                        result = key;
                    }
                    else {
                        result = Add(information);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Add()--->" + ex.Message);
                return result;
            }
            return result;
        }

        public static void AutoDelKey()
        {
            try {
                while (true) {
                    System.Threading.Thread.Sleep(1000*20);//每20秒遍历一次
                    lock (unid_Lock)
                    {
                        List<string> list = new List<string>();
                        foreach (KeyValuePair<string, JObject> kvp in unidMap)
                        {
                            JObject json = kvp.Value;
                            DateTime oldDateTime = DateTime.Parse(json["DateTime"].ToString());
                            if ((DateTime.Now- oldDateTime).TotalSeconds > 60*1) //当key的保存时间大于60秒就删除失效
                            {
                                list.Add(kvp.Key);
                            }
                        }
                        for (int i = 0; i < list.Count; i++)
                        {
                            unidMap.Remove(list[i]);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("AutoDelKey()--->" + ex.Message);
            }
        }

        public static bool unidContainsKey(string key) {
            bool result = false;
            try
            {
                lock (unid_Lock)
                {
                    if (unidMap.ContainsKey(key))
                    {
                        JObject json = unidMap[key];
                        json["DateTime"]= DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", DateTimeFormatInfo.InvariantInfo);
                        unidMap[key] = json;
                        result = true;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("unidContainsKey()--->" + ex.Message);
                return result;
            }
            return result;
        }


    }
}

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>展示漂亮网页</title>
    <link rel="stylesheet" href="/jscss/css/bootstrap.min.css">
    <link rel="stylesheet" href="/jscss/css/bootstrap-theme.min.css">
    <script src="/jscss/js/jquery-1.11.3.min.js"></script>
    <script src="/jscss/js/bootstrap.min.js"></script>
</head>
<body>
    <div class="page-header">
        <h1>Buttons</h1>
    </div>
    <p>
        <button type="button" class="btn btn-lg btn-default">Default</button>
        <button type="button" class="btn btn-lg btn-primary">Primary</button>
        <button type="button" class="btn btn-lg btn-success">Success</button>
        <button type="button" class="btn btn-lg btn-info">Info</button>
        <button type="button" class="btn btn-lg btn-warning">Warning</button>
        <button type="button" class="btn btn-lg btn-danger">Danger</button>
        <button type="button" class="btn btn-lg btn-link">Link</button>
    </p>
    <p>
        <button type="button" class="btn btn-default">Default</button>
        <button type="button" class="btn btn-primary">Primary</button>
        <button type="button" class="btn btn-success">Success</button>
        <button type="button" class="btn btn-info">Info</button>
        <button type="button" class="btn btn-warning">Warning</button>
        <button type="button" class="btn btn-danger">Danger</button>
        <button type="button" class="btn btn-link">Link</button>
    </p>
    <div class="page-header">
        <h1>Tables</h1>
    </div>
    <div class="row">
        <div class="col-md-6">
            <table class="table">
                <thead>
                    <tr>
                        <th>#</th>
                        <th>First Name</th>
                        <th>Last Name</th>
                        <th>Username</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>1</td>
                        <td>Mark</td>
                        <td>Otto</td>
                        <td>@mdo</td>
                    </tr>
                    <tr>
                        <td>2</td>
                        <td>Jacob</td>
                        <td>Thornton</td>
                        <td>@fat</td>
                    </tr>
                    <tr>
                        <td>3</td>
                        <td>Larry</td>
                        <td>the Bird</td>
                        <td>@twitter</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>


    <div class="page-header">
        <h1>Progress bars</h1>
    </div>

    <div class="progress">
        <div class="progress-bar progress-bar-striped" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%"><span class="sr-only">60% Complete</span></div>
    </div>
    <div class="progress">
        <div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%"><span class="sr-only">80% Complete (danger)</span></div>
    </div>
    <div class="progress">
        <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;"><span class="sr-only">60% Complete</span></div>
    </div>

    <div class="page-header">
        <h1>Panels</h1>
    </div>
    <div class="row">
        <div class="col-sm-4">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="panel-title">Panel title</h3>
                </div>
                <div class="panel-body">
                    Panel content
                </div>
            </div>
            <div class="panel panel-primary">
                <div class="panel-heading">
                    <h3 class="panel-title">Panel title</h3>
                </div>
                <div class="panel-body">
                    Panel content
                </div>
            </div>
        </div><!-- /.col-sm-4 -->
        <div class="col-sm-4">
            <div class="panel panel-success">
                <div class="panel-heading">
                    <h3 class="panel-title">Panel title</h3>
                </div>
                <div class="panel-body">
                    Panel content
                </div>
            </div>
            <div class="panel panel-info">
                <div class="panel-heading">
                    <h3 class="panel-title">Panel title</h3>
                </div>
                <div class="panel-body">
                    Panel content
                </div>
            </div>
        </div><!-- /.col-sm-4 -->
        <div class="col-sm-4">
            <div class="panel panel-warning">
                <div class="panel-heading">
                    <h3 class="panel-title">Panel title</h3>
                </div>
                <div class="panel-body">
                    Panel content
                </div>
            </div>
            <div class="panel panel-danger">
                <div class="panel-heading">
                    <h3 class="panel-title">Panel title</h3>
                </div>
                <div class="panel-body">
                    Panel content
                </div>
            </div>
        </div><!-- /.col-sm-4 -->
    </div>



</body>
</html>

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
很抱歉,我是一个文本AI助手,并不能直接进行图片下载和保存。不过我可以提供一下实现思路和代码示例供您参考。 1. 在web服务器内存放两张图片,比如路径为:`/webapp/images/pic1.jpg` 和 `/webapp/images/pic2.jpg`。 2. 编写一个Servlet,处理图片下载请求,代码示例如下: ```java @WebServlet("/downloadImage") public class DownloadImageServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取要下载的图片路径 String imagePath = request.getParameter("imagePath"); if (imagePath == null || imagePath.isEmpty()) { response.getWriter().write("参数错误!"); return; } // 设置响应头信息,告诉浏览器这是一个文件下载 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + imagePath.substring(imagePath.lastIndexOf("/") + 1)); // 将图片数据写入到响应输出流中 InputStream inputStream = getServletContext().getResourceAsStream(imagePath); OutputStream outputStream = response.getOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, len); } inputStream.close(); outputStream.flush(); outputStream.close(); } } ``` 3. 在JSP页面中添加下载链接,代码示例如下: ```html <a href="downloadImage?imagePath=/images/pic1.jpg">下载图片1</a> <a href="downloadImage?imagePath=/images/pic2.jpg">下载图片2</a> ``` 4. 在浏览器中访问该JSP页面,点击下载链接即可下载图片。 5. 下载完成后,可以在浏览器中打开下载文件,然后使用浏览器提供的保存功能将图片保存到桌面。 最后,为了让您更好地理解实现思路,附上一个完整的示例工程:[download-image-from-webserver.zip](https://github.com/JavaGuide/Java-Web-Examples/files/7356135/download-image-from-webserver.zip)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值