首先Nuget中下载包:Microsoft.AspNet.WebApi.SelfHost,如下:
注意版本哦,最高版本只能4.0.30506能用。
1.配置路由
public static class WebApiConfig
{
public static void Register(this HttpSelfHostConfiguration config)
{
// 配置JSON序列化设置
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
// 配置路由
//config.MapHttpAttributeRoutes();
config.Routes.Clear();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
路由器不要搞错了,其实和老版本asp.net 差不多。
2.创建一个控制器
public class ValuesController : ApiController
{
[HttpGet]
public string HelloWorld()
{
return "Hello World!";
}
[HttpGet]
public ModelTest Test()
{
var model = new ModelTest();
model.Id = Guid.NewGuid().ToString();
model.Name = "Test";
return model;
}
[HttpGet]
public List Test2()
{
List modelTests = new List();
for (int i = 0; i < 3; i++)
{
var model = new ModelTest();
model.Id = Guid.NewGuid().ToString();
model.Name = "Test";
modelTests.Add(model);
}
return modelTests;
}
}
创建一个WebServer,以来加载实现单例
public class WebServer
{
private static Lazy _lazy = new Lazy(() => new WebServer());
private ManualResetEvent _webEvent;
private WebServer()
{
}
public static WebServer Instance => _lazy.Value;
public string BaseAddress { get;set; }
public Action StartSuccessfulCallback { get; set; }
public Action RunEndCallback { get; set; }
public Action StartExceptionCallback { get;set; }
public void StartWebServer()
{
if (string.IsNullOrEmpty(BaseAddress)) return;
_webEvent=new ManualResetEvent(false);
Task.Factory.StartNew(() =>
{
HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(BaseAddress);
config.Register();
using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
try
{
server.OpenAsync().Wait();
if (StartSuccessfulCallback != null)
StartSuccessfulCallback(this);
_webEvent.WaitOne();
if (RunEndCallback != null)
RunEndCallback(this);
}
catch (AggregateException ex)
{
_webEvent.Set();
_webEvent.Close();
_webEvent = null;
if (StartExceptionCallback != null)
StartExceptionCallback(this,ex);
}
finally
{
server.CloseAsync().Wait();
server.Dispose();
}
}
});
}
public void StopWebServer()
{
if (_webEvent == null) return;
_webEvent.Set();
_webEvent.Close();
}
}
public class WebApiFactory
{
static string baseAddress = "http://localhost:9000/";
static WebApiFactory()
{
Server = WebServer.Instance;
Server.BaseAddress = baseAddress;
}
public static WebServer Server { get;private set; }
}
使用
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
WebApiFactory.Server.StartSuccessfulCallback = (t) =>
{
label1.Text = "Web API hosted on " + t.BaseAddress;
};
WebApiFactory.Server.RunEndCallback = (t) =>
{
label1.Text = "Web API End on " + t.BaseAddress;
};
WebApiFactory.Server.StartExceptionCallback = (t,ex) =>
{
MessageBox.Show(string.Join(";", ex.InnerExceptions.Select(x => x.Message)));
};
}
private void button1_Click(object sender, EventArgs e)
{
WebApiFactory.Server.StartWebServer();
}
private void button2_Click(object sender, EventArgs e)
{
WebApiFactory.Server.StopWebServer();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
WebApiFactory.Server.StopWebServer();
}
}
注:启动时必须以管理员身份启动程序
我们挂的是http://localhost:9000/,接下来我们去请求:http://localhost:9000/api/Values/Test2
扩展:简单添加权限验证,不通过路由
public class BasicAuthorizationHandler : DelegatingHandler
{
protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Method == HttpMethod.Options)
{
var optRes = base.SendAsync(request, cancellationToken);
return optRes;
}
if (!ValidateRequest(request))
{
var response = new HttpResponseMessage(HttpStatusCode.Forbidden);
var content = new Result
{
success = false,
errs = new[] { "服务端拒绝访问:你没有权限" }
};
response.Content = new StringContent(JsonConvert.SerializeObject(content), Encoding.UTF8, "application/json");
var tsc = new TaskCompletionSource();
tsc.SetResult(response);
return tsc.Task;
}
var res = base.SendAsync(request, cancellationToken);
return res;
}
///
/// 验证信息解密并对比
///
///
///
private bool ValidateRequest(HttpRequestMessage message)
{
var authorization = message.Headers.Authorization;
//如果此header为空或不是basic方式则返回未授权
if (authorization != null && authorization.Scheme == "Basic" && authorization.Parameter != null)
{
string Parameter = authorization.Parameter;// 按理说发送过来的做了加密,这里需要解密
return Parameter == "111";// 身份验证码
}
else
{
return false;
}
}
}
///
/// 构建用于返回错误信息的对象
///
public class Result
{
public bool success { get; set; }
public string[] errs { get; set; }
}
然后在WebApiConfig中注册
// 注册身份验证
config.MessageHandlers.Add(new BasicAuthorizationHandler());
根据自己需求做扩展吧,这里由于时间问题简单做身份验证(全局)
根据控制器或方法添加身份验证(非全局):
public class AuthorizationAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
// 如果验证失败,返回未授权的响应
if (!IsUserAuthorized(actionContext))
{
// 如果身份验证失败,返回未授权的响应
var content = new Result
{
success = false,
errs = new[] { "服务端拒绝访问:你没有权限" }
};
actionContext.Response= actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Unauthorized");
actionContext.Response.Content = new StringContent(JsonConvert.SerializeObject(content), Encoding.UTF8, "application/json");
}
}
private bool IsUserAuthorized(HttpActionContext actionContext)
{
var authorizationHeader = actionContext.Request.Headers.Authorization;
if (authorizationHeader != null && authorizationHeader.Scheme == "Bearer" && authorizationHeader.Parameter != null)
{
// 根据实际需求,进行适当的身份验证逻辑
// 比较 authorizationHeader.Parameter 和预期的授权参数值
return authorizationHeader.Parameter == "111";
}
return false;
}
}
public static class WebApiConfig
{
public static void Register(this HttpSelfHostConfiguration config)
{
// 注册身份验证(全局)
//config.MessageHandlers.Add(new BasicAuthorizationHandler());
config.Filters.Add(new AuthorizationAttribute());
// 配置JSON序列化设置
config.RegisterJsonFormatter();
// 配置路由
config.RegisterRoutes();
}
private static void RegisterJsonFormatter(this HttpSelfHostConfiguration config)
{
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
private static void RegisterRoutes(this HttpSelfHostConfiguration config)
{
//config.MapHttpAttributeRoutes();
config.Routes.Clear();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
然后在控制器中:
public class ValuesController : ApiController
{
[HttpGet]
public string HelloWorld()
{
return "Hello World!";
}
[HttpGet]
public ModelTest Test()
{
var model = new ModelTest();
model.Id = Guid.NewGuid().ToString();
model.Name = "Test";
return model;
}
[Authorization]
[HttpGet]
public List Test2()
{
List modelTests = new List();
for (int i = 0; i < 3; i++)
{
var model = new ModelTest();
model.Id = Guid.NewGuid().ToString();
model.Name = "Test";
modelTests.Add(model);
}
return modelTests;
}
}
全局异常处理:
public class GlobalExceptionFilter : IExceptionFilter
{
public bool AllowMultiple => false;
public Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
{
// 在这里实现自定义的异常处理逻辑
// 根据实际需求,处理异常并生成适当的响应
// 示例:将异常信息记录到日志中
LogException(actionExecutedContext.Exception);
// 示例:返回带有错误信息的响应
var content = new Result
{
success = false,
errs = new[] { "发生了一个错误" }
};
actionExecutedContext.Response = actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Internal Server Error");
actionExecutedContext.Response.Content = new StringContent(JsonConvert.SerializeObject(content), Encoding.UTF8, "application/json");
var tcs = new TaskCompletionSource();
tcs.SetResult(null);
return tcs.Task;
}
private void LogException(Exception exception)
{
// 在这里编写将异常信息记录到日志的逻辑
}
}
public static class WebApiConfig
{
public static void Register(this HttpSelfHostConfiguration config)
{
// 注册身份验证(全局)
//config.MessageHandlers.Add(new BasicAuthorizationHandler());
config.Filters.Add(new AuthorizationAttribute());
// 注册全局异常过滤器
config.Filters.Add(new GlobalExceptionFilter());
// 配置JSON序列化设置
config.RegisterJsonFormatter();
// 配置路由
config.RegisterRoutes();
}
private static void RegisterJsonFormatter(this HttpSelfHostConfiguration config)
{
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
private static void RegisterRoutes(this HttpSelfHostConfiguration config)
{
//config.MapHttpAttributeRoutes();
config.Routes.Clear();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
写一个测试接口:
[HttpGet]
public int Test3()
{
int a = 3;
int b = 0;
return a / b;
}
我们知道有5个Filter,这里只用到了其中的两个,其它自定义实现
你可能感兴趣的:(.net)
Linux学习笔记 - 6
Norvyn_7
Linux学习 linux 学习 笔记
Linux学习笔记-6本篇将介绍网络配置、传输工具、端口管理、进程管理、主机监控及环境变量相关命令。1.IP地址和主机名1.1IP地址作用:用于计算机之间的网络通信。IPv4格式:a.b.c.d(每个数字范围0~255),例如192.168.1.1。查看本机IP:ifconfig#需先安装net-toolsipaddr#无需安装,推荐使用安装ifconfig:CentOS:yum-yinstall
Kubernetes 中 Pod 的状态及其背后的场景分析
简单简单小白
kubernetes 容器 云原生
《Kubernetes中Pod的状态及其背后的场景分析》1.引言:Pod状态的重要性在Kubernetes中,Pod是最小的部署单元,通常用于部署容器化应用。Pod的生命周期非常动态,它会经历多个不同的状态,每个状态的变化都代表着Pod在集群中的不同阶段。理解这些状态以及它们出现的场景,对于运维和调试容器化应用至关重要。本文将详细介绍Kubernetes中Pod可能的状态及其解释,帮助你更好地理解
Java部署机器学习模型:方案二(基于DJL)
iiilloi
机器学习 spring spring boot
DJL(DeepJavaLibrary)是由亚马逊公司开发的一款开源的深度学习框架,它旨在为Java开发人员提供一个简单而强大的API,使得在Java中使用深度学习变得更加容易。DJL有以下几个方面优势:支持多个底层引擎DJL支持多个底层引擎,包括MXNet、TensorFlow和PyTorch等。这使得DJL可以在多个平台上使用,包括Java、Android、iOS和RaspberryPi等。易
阿里云 ACS:高效、弹性、低成本的容器计算解决方案
Anna_Tong
阿里云 云计算 人工智能 devops 容器 serverless kubernetes
阿里云的容器计算服务(AlibabaCloudContainerService,ACS)是一种Serverless容器计算解决方案,提供高度弹性、低成本、易管理的Kubernetes(K8s)容器运行环境。用户无需关注底层服务器资源,而是直接管理容器工作负载,从而提升运维效率和资源利用率。1.主要应用场景ACS适用于多种业务类型,尤其是在弹性计算和微服务架构领域,具有独特优势。(1)在线业务和We
nats集群搭建
fusugongzi
网络 服务器 运维
本次使用三台机器搭建nats集群,ip分别为192.168.20.7、192.168.20.8、192.168.20.10,预先在三台机器上装好nats,版本为0.0.35。1.在192.168.20.7机器上操作,配置server.conf#为节点设置唯一的名称server_name:node1port:4222#供客户端连接的监听端口net:0.0.0.0#监听的网络地址http_port:8
【网络安全】网络安全攻防 -- 黑客攻击简要流程
网络安全指导员
网络安全 黑客 程序员 web安全 安全
呆了,百度不够强大,好多工具百度竟然百度不出来;1.踩点(Footprinting)踩点目的:主动获取信息情报,确定目标域名系统,网络地址范围,名字空间,关键系统如网关邮件服务器等设置;踩点相关技术:源查询,whois,whois的Web接口,ARINwhois;踩点所使用的工具:--Usenet(新闻组):基于网络的计算机组合,新闻服务器;--搜索引擎:呵呵;--Edgar:电子数据化,分析及检
k8s的资源说明 cpu 内存 requests usage limits
节点。csn
linux kubernetes 容器 云原生
一、k8s资源配置在Kubernetes中,有三个非常重要的资源概念,分别是资源请求(Requests)、资源使用率(Usage)和资源限制(Limits)1、资源请求Requests资源请求是Pod启动时向Kubernetes调度器声明的最低资源需求。调度器会根据这些请求值来决定是否将Pod调度到某个节点上。作用资源预留:确保Pod启动时有足够的资源可用。调度决策:调度器会检查节点的可用资源是否
linux CentOS系统上卸载Kubernetes(k8s)
魏 无羡
linux centos kubernetes
一、停止Kubernetes服务首先,需要停止所有Kubernetes相关的服务。使用systemctl命令来停止这些服务:sudosystemctlstopkubeletsudosystemctlstopkube-apiserversudosystemctlstopkube-controller-managersudosystemctlstopkube-schedulersudosystemct
c#编程:LINQ是什么?
gu20
c# linq 开发语言
LINQ(LanguageIntegratedQuery)是微软在.NETFramework3.5中引入的一组功能,旨在提供一种一致的方式来查询任何类型的数据集合。LINQ的核心理念是将查询能力直接集成到C#和VB等.NET编程语言中,使得开发者能够以类似SQL的方式对内存中的数据集合(如数组、集合、字典等)以及数据库中的数据进行查询和操作。LINQ主要分为几个部分:LINQtoObjects:允
Linux OpenSSL 生成CA证书及终端用户证书
深度视觉机器
Centos7 openssl ca证书
一、环境OpenSSL1.0.2kFireFox60.064位Chrome66.0.3359.181(正式版本)(32位)InternetExplorer11.2248.14393.0Websocketd0.3.0Nginx1.12.2二、生成CA根证书1、准备ca配置文件,得到ca.conf$vimca.conf内容如下:[req]default_bits=4096distinguished_n
Pytorch实现之GIEGAN(生成器信息增强GAN)训练自己的数据集
这张生成的图像能检测吗
GAN系列 pytorch 生成对抗网络 人工智能 深度学习 计算机视觉 机器学习 python
简介简介:在训练数据样本之前首先利用VAE来推断潜在空间中不同类的分布,用于后续的训练,并使用它来初始化GAN。与ACGAN和BAGAN不同的是,提出的GIEGAN有一个分类器结构,这个分类器主要判断生成的图像或者样本图像属于哪个类,而鉴别器仅判断图像是来自于生成器还是真实样本。论文题目:GeneratorInformationEnhancementGenerativeAdversarialNet
安装libcurl4-openssl-dev以支持HTTPS网络通信
Leon_Jinhai_Sun
python
`libcurl4-openssl-dev`是一个在基于Debian的Linux发行版(如Ubuntu)中使用的软件包名称,它用于安装libcurl库的开发文件和OpenSSL支持。下面是对它的详细解释:1.**libcurl**:libcurl是一个免费的、易于使用的客户端URL传输库,支持多种协议,包括HTTP、HTTPS、FTP、FTPS、SFTP、SCP、DICT、TELNET、TFTP、
【ATU 随笔记】整车网路系统架构之探讨 ( 一 )
WPG大大通
NXP产线 大大通 笔记 经验分享 CAN 汽车 车载系统
一、前言在现今的车辆设计中,通讯架构扮演着至关重要的角色,以确保车内各个电子控制单元(ElectronicControlUnit,ECU)能够快速且可靠地交换资讯。车用通讯协议的选择多样且具备不同的应用特性,其中包括CAN(ControllerAreaNetwork)、LIN(LocalInterconnectNetwork)、Ethernet和FlexRay等。每一种通讯协议皆有其特定的应用范畴
k8s ssl 漏洞修复
魏 无羡
kubernetes ssl 容器
针对Kubernetes集群中SSL/TLS协议信息泄露漏洞(CVE-2016-2183)的修复,需重点修改涉及弱加密算法的组件配置。以下是具体修复步骤及验证方法:一、漏洞修复步骤1.修复etcd服务修改配置文件:编辑/etc/kubernetes/manifests/etcd.yaml,在command段添加以下参数禁用弱加密算法:---cipher-suites=TLS_ECDHE_RSA_W
Netty学习 - 编译Netty4.2
wisfy_21
Netty学习
编译Netty4.2版本遇到一些问题:首先是缺失io.netty.util.collection.IntObjectHashMap这类collection包。这个问题的原因是,在netty-common下,这些是需要根据模板生成类,所以需要先编译打包netty-common。在netty-common下执行package的时候,会遇到另一个错误io.netty:netty-dev-tools:ja
【深度学习】Unet的基础介绍
牧歌悠悠
深度学习 人工智能 算法 深度学习 人工智能 U-net
U-Net是一种用于图像分割的深度学习模型,特别适合医学影像和其他需要分割细节的任务。如图:Unet论文原文为什么叫U-Net?U-Net的结构像字母“U”,所以得名。它的结构由两个主要部分组成:下采样(编码器):图像逐渐被缩小并且提取特征。上采样(解码器):逐渐恢复图像的尺寸,并通过“跳跃连接”将高分辨率的特征与低分辨率的特征结合,以保持细节。网络结构U-Net通常包括以下几部分:(1)下采样(
有了Docker为啥还需要k8s?
简单简单小白
docker kubernetes 容器
这里写目录标题Docker的作用:Kubernetes的作用:为什么有了Docker还需要Kubernetes?单机无法满足需求:容器的自动化管理:跨多环境的统一管理:总结:Docker和Kubernetes(K8s)是两种不同的技术,它们各自解决了不同的问题,但一起使用时能发挥更大的作用。简单来说,Docker主要解决的是容器化的问题,而Kubernetes解决的是如何有效地管理和编排这些容器。
ASP.NET MVC 下载文件
csdn_aspnet
.net asp.net mvc
如何从MVC控制器(.NETFramework)下载文件。使用从ASP.NETMVC中的控制器下载任何文件类型FileStreamResult。注意:如果使用ASP.NETCore,请参阅此页面,如果想要将文件上传到服务器,请参阅此页面。//downloadazipfileasanattachmentpublicFileStreamResultDownloadZipFile(){stringpat
C# 入门简介
水煮庄周鱼鱼
c# 开发语言
关于C#C#(读作CSharp)是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言,最初于2000年发布,并随后成为.NET框架的一部分。所以学习C#语言的同时,也是需要同步学习.NET框架的,不过要要注意C#与.NET的对应版本。C#语言和Java类似,是一门简单易用、应用广泛的高级编程语言。结合了面向对象编程、事件驱动、泛型编程、异步编程等众多现代化编程概念,属于编译性语言。主要特
Linux如何修改SSH端口号
wuling129
CentOS
Linux如何修改SSH端口号SSH是什么?SSH为SecureShell由IETF的网络工作小组(NetworkWorkingGroup)所制定;SSH是建立在应用层和传输层基础上的一种安全协议。SSH传输数据是加密的,可以有效防止传输过程被截取数据保障安全。SSH的数据是经过压缩的,所以可以加快传输的速度SSH服务端口修改1.首先查看一下当前linux是否已经安装SSH软件包,使用rpm-qa
C++ 课程设计 汇总(含源码)
三雷科技
笔记 c++ 课程设计 开发语言
C++课程设计[C++课程设计个人账务管理系统(含源码)](https://arv000.blog.csdn.net/article/details/145601695)[C++课程设计运动会分数统计(含源码)](https://arv000.blog.csdn.net/article/details/145601819)[C++课程设计打印万年历(含源码)](https://arv000.blo
centos 安装alien
编程日记
Linux
出处:http://linux4you.in/install-netapp-oncommand-system-manger-on-centos/1.在root权限下执行命令$sudosu2.安装alien需要的依赖包#yum-yinstallPythonrpm-buildmakem4gcc-c++autoconfautomakeredhat-rpm-configmod_dav_svnmod_ssl
[k8s]部署MetalLB(Layer2模式)
Logout:
容器 k8s kubernetes 容器 云原生
创建安装目录mkdir/etc/kubernetes/MetalLB修改kube-proxy配置kubectleditconfigmap-nkube-systemkube-proxymode:"ipvs"#添加ipvsstrictARP:true#false改为true创建namespacekubectlcreatenamespacemetallb-system创建ip池cat>IPAddress
[k8s]部署ingress-nginx
Logout:
k8s 容器 kubernetes nginx 容器
获取安装包https://github.com/kubernetes/ingress-nginx/blob/controller-v1.11.1/deploy/static/provider/baremetal/deploy.yaml修改端口映射方式sed-is#NodePort#LoadBalancer#g/etc/kubernetes/ingress-nginx/deploy.yaml部署in
Springboot 集成 netty-socketio + Vue前端分离
Synologs过客
Java java ajax socket websocket spring
Springboot集成netty-socketionetty-socketio:仿`node.js`实现的socket.io服务端1.将WebSocket、AJAX和其它的通信方式全部封装成了统一的通信接口2.使用时,不用担心兼容问题,底层会自动选用最佳的通信方式3.适合进行服务端和客户端双向数据通信pom.xmlcom.corundumstudio.socketionetty-socketio
.NET8入门:11.身份验证(Windows)
晴天_QingTian
.NET8从入门到放弃 .net windows
ASP.NETCore中提供了多种身份证认证模式,几种常见的身份认证模式有以下几种。本文将详细介绍一下Windows身份认证在ASP.NETCore中如何使用。认证模式介绍Cookie最常见的身份认证方式之一。用户登录成功后,服务器会生成一个加密的Cookie并发送给客户端,客户端在后续请求中携带该Cookie来验证用户身份。JWTJSONWebToken)是一种基于JSON的开放标准(RFC75
.NET8入门:8.身份验证(JWT)
晴天_QingTian
.NET8从入门到放弃 .net
ASP.NETCore中提供了多种身份证认证模式,几种常见的身份认证模式有以下几种。本文将详细介绍一下JWT身份认证在ASP.NETCore中如何使用。认证模式介绍Cookie最常见的身份认证方式之一。用户登录成功后,服务器会生成一个加密的Cookie并发送给客户端,客户端在后续请求中携带该Cookie来验证用户身份。JWTJSONWebToken)是一种基于JSON的开放标准(RFC7519),
.NET8入门:12.ASP.NET Core 中的路由
晴天_QingTian
.NET8从入门到放弃 .net asp.net mvc
路由ASP.NETCoreMVC中的路由是使用路由中间件来匹配传入请求的URL并映射到操作的。ASP.NETCoreMVC中支持两种路由:传统路由和属性路由。传统路由传统路由是什么呢?传统路由是通过约定的形势来进行URL映射的,下面的路由模板约定了URL模板为“控制器/行为/可选参数”,例如:http:120.0.0.1/Home/Index/1会访问到Home控制下的Index方法。(在Prog
pdf转换成word在线 简单好用 支持批量转换 效率高 100%还原
hello_simon
pdf word 自媒体 产品运营 性能优化 pdf转换 pdf转word
pdf转换成word在线简单好用支持批量转换效率高100%还原在数字化办公的浪潮中,文档格式转换常常让人头疼不已,尤其是PDF转Word的需求极为常见。PDF格式虽然方便阅读和传输,但难以编辑,而Word格式却能灵活地进行内容修改。现在,有一款宝藏工具——小白工具网PDF在线转换功能(https://www.xiaobaitool.net/files/pdf-word/?r=qzz1x8),让PD
前后端分离的Netty + WebSocket实现聊天室
CRE_MO
websocket python 网络协议
1.前端WebSocketChatvarsocket;if(!window.WebSocket){window.WebSocket=window.MozWebSocket;}if(window.WebSocket){socket=newWebSocket("ws://localhost:8088/ws");socket.onmessage=function(event){console.log("
关于旗正规则引擎中的MD5加密问题
何必如此
jsp MD5 规则 加密
一般情况下,为了防止个人隐私的泄露,我们都会对用户登录密码进行加密,使数据库相应字段保存的是加密后的字符串,而非原始密码。
在旗正规则引擎中,通过外部调用,可以实现MD5的加密,具体步骤如下:
1.在对象库中选择外部调用,选择“com.flagleader.util.MD5”,在子选项中选择“com.flagleader.util.MD5.getMD5ofStr({arg1})”;
2.在规
【Spark101】Scala Promise/Future在Spark中的应用
bit1129
Promise
Promise和Future是Scala用于异步调用并实现结果汇集的并发原语,Scala的Future同JUC里面的Future接口含义相同,Promise理解起来就有些绕。等有时间了再仔细的研究下Promise和Future的语义以及应用场景,具体参见Scala在线文档:http://docs.scala-lang.org/sips/completed/futures-promises.html
spark sql 访问hive数据的配置详解
daizj
spark sql hive thriftserver
spark sql 能够通过thriftserver 访问hive数据,默认spark编译的版本是不支持访问hive,因为hive依赖比较多,因此打的包中不包含hive和thriftserver,因此需要自己下载源码进行编译,将hive,thriftserver打包进去才能够访问,详细配置步骤如下:
1、下载源码
2、下载Maven,并配置
此配置简单,就略过
HTTP 协议通信
周凡杨
java httpclient http 通信
一:简介
HTTPCLIENT,通过JAVA基于HTTP协议进行点与点间的通信!
二: 代码举例
测试类:
import java
java unix时间戳转换
g21121
java
把java时间戳转换成unix时间戳:
Timestamp appointTime=Timestamp.valueOf(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:m
web报表工具FineReport常用函数的用法总结(报表函数)
老A不折腾
web报表 finereport 总结
说明:本次总结中,凡是以tableName或viewName作为参数因子的。函数在调用的时候均按照先从私有数据源中查找,然后再从公有数据源中查找的顺序。
CLASS
CLASS(object):返回object对象的所属的类。
CNMONEY
CNMONEY(number,unit)返回人民币大写。
number:需要转换的数值型的数。
unit:单位,
java jni调用c++ 代码 报错
墙头上一根草
java C++ jni
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000777c3290, pid=5632, tid=6656
#
# JRE version: Java(TM) SE Ru
Spring中事件处理de小技巧
aijuans
spring Spring 教程 Spring 实例 Spring 入门 Spring3
Spring 中提供一些Aware相关de接口,BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,其中最常用到de匙ApplicationContextAware.实现ApplicationContextAwaredeBean,在Bean被初始后,将会被注入 Applicati
linux shell ls脚本样例
annan211
linux linux ls源码 linux 源码
#! /bin/sh -
#查找输入文件的路径
#在查找路径下寻找一个或多个原始文件或文件模式
# 查找路径由特定的环境变量所定义
#标准输出所产生的结果 通常是查找路径下找到的每个文件的第一个实体的完整路径
# 或是filename :not found 的标准错误输出。
#如果文件没有找到 则退出码为0
#否则 即为找不到的文件个数
#语法 pathfind [--
List,Set,Map遍历方式 (收集的资源,值得看一下)
百合不是茶
list set Map遍历方式
List特点:元素有放入顺序,元素可重复
Map特点:元素按键值对存储,无放入顺序
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
List接口有三个实现类:LinkedList,ArrayList,Vector
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身
解决SimpleDateFormat的线程不安全问题的方法
bijian1013
java thread 线程安全
在Java项目中,我们通常会自己写一个DateUtil类,处理日期和字符串的转换,如下所示:
public class DateUtil01 {
private SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public void format(Date d
http请求测试实例(采用fastjson解析)
bijian1013
http 测试
在实际开发中,我们经常会去做http请求的开发,下面则是如何请求的单元测试小实例,仅供参考。
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.httpclient.HttpClient;
import
【RPC框架Hessian三】Hessian 异常处理
bit1129
hessian
RPC异常处理概述
RPC异常处理指是,当客户端调用远端的服务,如果服务执行过程中发生异常,这个异常能否序列到客户端?
如果服务在执行过程中可能发生异常,那么在服务接口的声明中,就该声明该接口可能抛出的异常。
在Hessian中,服务器端发生异常,可以将异常信息从服务器端序列化到客户端,因为Exception本身是实现了Serializable的
【日志分析】日志分析工具
bit1129
日志分析
1. 网站日志实时分析工具 GoAccess
http://www.vpsee.com/2014/02/a-real-time-web-log-analyzer-goaccess/
2. 通过日志监控并收集 Java 应用程序性能数据(Perf4J)
http://www.ibm.com/developerworks/cn/java/j-lo-logforperf/
3.log.io
和
nginx优化加强战斗力及遇到的坑解决
ronin47
nginx 优化
先说遇到个坑,第一个是负载问题,这个问题与架构有关,由于我设计架构多了两层,结果导致会话负载只转向一个。解决这样的问题思路有两个:一是改变负载策略,二是更改架构设计。
由于采用动静分离部署,而nginx又设计了静态,结果客户端去读nginx静态,访问量上来,页面加载很慢。解决:二者留其一。最好是保留apache服务器。
来以下优化:
java-50-输入两棵二叉树A和B,判断树B是不是A的子结构
bylijinnan
java
思路来自:
http://zhedahht.blog.163.com/blog/static/25411174201011445550396/
import ljn.help.*;
public class HasSubtree {
/**Q50.
* 输入两棵二叉树A和B,判断树B是不是A的子结构。
例如,下图中的两棵树A和B,由于A中有一部分子树的结构和B是一
mongoDB 备份与恢复
开窍的石头
mongDB备份与恢复
Mongodb导出与导入
1: 导入/导出可以操作的是本地的mongodb服务器,也可以是远程的.
所以,都有如下通用选项:
-h host 主机
--port port 端口
-u username 用户名
-p passwd 密码
2: mongoexport 导出json格式的文件
[网络与通讯]椭圆轨道计算的一些问题
comsci
网络
如果按照中国古代农历的历法,现在应该是某个季节的开始,但是由于农历历法是3000年前的天文观测数据,如果按照现在的天文学记录来进行修正的话,这个季节已经过去一段时间了。。。。。
也就是说,还要再等3000年。才有机会了,太阳系的行星的椭圆轨道受到外来天体的干扰,轨道次序发生了变
软件专利如何申请
cuiyadll
软件专利 申请
软件技术可以申请软件著作权以保护软件源代码,也可以申请发明专利以保护软件流程中的步骤执行方式。专利保护的是软件解决问题的思想,而软件著作权保护的是软件代码(即软件思想的表达形式)。例如,离线传送文件,那发明专利保护是如何实现离线传送文件。基于相同的软件思想,但实现离线传送的程序代码有千千万万种,每种代码都可以享有各自的软件著作权。申请一个软件发明专利的代理费大概需要5000-8000申请发明专利可
Android学习笔记
darrenzhu
android
1.启动一个AVD
2.命令行运行adb shell可连接到AVD,这也就是命令行客户端
3.如何启动一个程序
am start -n package name/.activityName
am start -n com.example.helloworld/.MainActivity
启动Android设置工具的命令如下所示:
# am start -
apache虚拟机配置,本地多域名访问本地网站
dcj3sjt126com
apache
现在假定你有两个目录,一个存在于 /htdocs/a,另一个存在于 /htdocs/b 。
现在你想要在本地测试的时候访问 www.freeman.com 对应的目录是 /xampp/htdocs/freeman ,访问 www.duchengjiu.com 对应的目录是 /htdocs/duchengjiu。
1、首先修改C盘WINDOWS\system32\drivers\etc目录下的
yii2 restful web服务[速率限制]
dcj3sjt126com
PHP yii2
速率限制
为防止滥用,你应该考虑增加速率限制到您的API。 例如,您可以限制每个用户的API的使用是在10分钟内最多100次的API调用。 如果一个用户同一个时间段内太多的请求被接收, 将返回响应状态代码 429 (这意味着过多的请求)。
要启用速率限制, [[yii\web\User::identityClass|user identity class]] 应该实现 [[yii\filter
Hadoop2.5.2安装——单机模式
eksliang
hadoop hadoop单机部署
转载请出自出处:http://eksliang.iteye.com/blog/2185414 一、概述
Hadoop有三种模式 单机模式、伪分布模式和完全分布模式,这里先简单介绍单机模式 ,默认情况下,Hadoop被配置成一个非分布式模式,独立运行JAVA进程,适合开始做调试工作。
二、下载地址
Hadoop 网址http:
LoadMoreListView+SwipeRefreshLayout(分页下拉)基本结构
gundumw100
android
一切为了快速迭代
import java.util.ArrayList;
import org.json.JSONObject;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayo
三道简单的前端HTML/CSS题目
ini
html Web 前端 css 题目
使用CSS为多个网页进行相同风格的布局和外观设置时,为了方便对这些网页进行修改,最好使用( )。http://hovertree.com/shortanswer/bjae/7bd72acca3206862.htm
在HTML中加入<table style=”color:red; font-size:10pt”>,此为( )。http://hovertree.com/s
overrided方法编译错误
kane_xie
override
问题描述:
在实现类中的某一或某几个Override方法发生编译错误如下:
Name clash: The method put(String) of type XXXServiceImpl has the same erasure as put(String) of type XXXService but does not override it
当去掉@Over
Java中使用代理IP获取网址内容(防IP被封,做数据爬虫)
mcj8089
免费代理IP 代理IP 数据爬虫 JAVA设置代理IP 爬虫封IP
推荐两个代理IP网站:
1. 全网代理IP:http://proxy.goubanjia.com/
2. 敲代码免费IP:http://ip.qiaodm.com/
Java语言有两种方式使用代理IP访问网址并获取内容,
方式一,设置System系统属性
// 设置代理IP
System.getProper
Nodejs Express 报错之 listen EADDRINUSE
qiaolevip
每天进步一点点 学习永无止境 nodejs 纵观千象
当你启动 nodejs服务报错:
>node app
Express server listening on port 80
events.js:85
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at exports._errnoException (
C++中三种new的用法
_荆棘鸟_
C++ new
转载自:http://news.ccidnet.com/art/32855/20100713/2114025_1.html
作者: mt
其一是new operator,也叫new表达式;其二是operator new,也叫new操作符。这两个英文名称起的也太绝了,很容易搞混,那就记中文名称吧。new表达式比较常见,也最常用,例如:
string* ps = new string("
Ruby深入研究笔记1
wudixiaotie
Ruby
module是可以定义private方法的
module MTest
def aaa
puts "aaa"
private_method
end
private
def private_method
puts "this is private_method"
end
end