❶ WebApi中,怎么获取接口调用者的外网ip地址
不是默认的 WSDL 都会给一个 transport 的地址么,那个 URL 中应该有地址,当然可能不是 IP 而是服务器域名,当然也有可能人家没有把 URL 直接写在 WSDL 中,但会另外在文档中告诉你 URL 地址。你为什么需要知道 IP 地址而不直接用域名?
从分布式的松耦合设计中我们了解到,客户端应该只看 WSDL 再加上额外提供的可选的 URL (如果 WSDL 中没有提供这个 transport 配置的话)就应该可以完成与服务器的数据交换,不再需要其它条件。
❷ c#webapi接口怎么加上安全校验
下面这几个注意事项或许可以帮你一些
1. 找到Web应用所有的输入点,找到所有的能接受用户输入的地方,漏掉输入点也就漏掉了可能存在的缝。
2. 过滤每一个输入点,为每个输入点设定相应的校验规则和边界。
3. 不要忘记校验哪些隐藏域,cookie和url参数。
4. 验证从数据库里面得到的数据,这个是最容易忽视的地方,不要相信来自数据库里面的数据就是合法的数据。
5. 你是如何做输入校验的? javascript?如果只是用javascript做客户端校验, 风险还是很大的,一定要确保加上服务端的校验,否则如果客户端禁用了javascript或者客户端代码被人工修改,非法数据还是会进入系统内部的。
6. 隐藏异常信息,再周全的校验也不可能覆盖所有的case,如果非法数据造成了系统的异常,不要将详细的异常信息暴露给客户端,这些异常信息有可能成为系统的攻击入口。
在做输入校验的时候,从“什么样的输入才是合法的”入手会降低验证失效的风险,应该只为每个输入点的输入内容制定一个有限的,刚好够用的合法范围,除此之外的所有内容都当做是非法的。而从“什么样的输入是不合法的”入手则会增加验证失效的可能,因为你不可能穷举非法的输入。
❸ WebApi 2 路由机制
.net中包含的路由有两种,第一种是MVC模式的按url匹配action,第二种是WebApi模式的按http请求的方法匹配action,本文我们学习WebApi的路由模式。
首先新建一个WebApi项目,选择ASP.NET Web应用程序(.NET Framework)
这里我们首先来看WebApi的基础配置 WebApiConfig.cs ,其路径为 /App_Start/WebApiConfig.cs
首先以浏览器启动webapi项目
会发现页面显示403,这是很正常的,因为我们在新建项目的时候没有加入MVC,所以没有可视化的view页面,不过我们却拿到了这个项目的 端口号
为了更加方便直观的看我们的接口请求,我们选择postman,首先在项目新建一个 controller
通过以上的操作,我们就搭建好了一个webApi2的项目工程,后面我们就在这个工程的基础上进行webApi 2的开发和学习。
webApi的路由过程主要经历了如下三步
WebApiConfig.cs 这个文件是进行路由表的核心文件, WebApiConfig 里面只有一个方法,这个方法在 Global.asax 文件里的 Application_Start() 方法被调用, Global.asax 文件是一个全局文件,当我们网页启动时就会去执行它。 Register(HttpConfiguration config) 方法是配置WEB API路由的。
因此 在webAP工程启动的时候,会执行 Global.asax ,这个文件里面注册了 WebApiConfig.cs 的一系列初始化配置,从而实现了webapi。
WebApi 2 框架使用路由表。 并由Web API 的 Visual Studio 项目模板创建默认路由
转到 MapHttpRoute 的定义,可以看到它有4个重载
分别来看看各个参数的作用
webApi2工程自动为我们创建了默认的路由
经过上面的讲解,我们知道了匹配的URL是 api/{controller}/{id}
那么我们在实际的请求中应该如何请求
新建一个 StudentsController
依次对以下地址进行请求
总结:
默认路由的缺点
如下
添加如下的方法(action)
得到了一下的结果
我们来看看这个请求是如何进行匹配的,首先找到 /App_Start/WebApiConfig.cs
按照路由模板来看,我们请求的路由没有 action 名称,那么它是怎么进行匹配的呢?
其实当我们访问 http://localhost:65066/api/student 这个url的时候,webapi会自动去匹配 api/{controller}/{id} 这个模板,在这个路径中,student是controller,那么它又是怎么去找到 getStudentName 这个action的呢?明明我们都没有传action这个参数,其实Webapi的路由规则是通过http方法去匹配对应的action,我们请求这个地址是用的 GET 方法,那么webapi会找Order这个控制器里面的get请求的方法,同事我们的这个 getStudentName 是以 get 开头的,它符合了webapi的匹配规则,于是就请求成功了,但前提是你写的方法必须是以get开头的,如果当前这个controller一个get开头的都没有,那么就显示 请求的资源不支持 http 方法“GET” 。
当然不以get开头的前提是你必须加上 [HttpGet] 这个特性,webapi才知道你这个是get的请求方法,就能正确进行匹配。
然后我们再回到 /App_Start/WebApiConfig.cs ,看下里面 MapHttpRoute 的各个参数的含义,首先转到它的定义,发现它是 HttpRouteCollection 的扩展方法, MapHttpRoute 有4类重载
在 WebApiConfig.cs 里面修改为如下的路由模板
接口请求如下
通过 action 的名称来匹配很好理解,上面的 StudentName() 是方法名, webApi 会默认它就是 action 的名称,如果你想要方法名和 action 的名称不一致,你也可以自定义 action 的名称,这个可以通过特性 ActionName 来实现,如下:
首先看路由模板
对于同请求类型,同请求参数的请求,会出现 不传参数,找不到匹配的资源 或 传了参数,但是找到了与该请求匹配的多个操作 的问题,如下所示
解决以上的办法有两种
如果要使用特性路由,首先在 WebApiConfig.cs 的 Register 方法里面必须先启用特性路由(一般情况下,当我们新建一个 WebApi 项目的时候,会自动在 Register 方法里面加上这句话。)
特性路由的目的是为了解决我们公共路由模板引擎解决不了的问题。一个action定义了特性路由之后,就能通过特性路由上面的路由规则找到。
只要出现了特性路由,匹配的规则是按特性路由来的
修改studentController如下
参考
参考
路由前缀的一般的做法是在控制器上面使用特性 [RoutePrefix] 来标识。
但是需要注意路由前缀不能以 / 开头
❹ java webapi接口怎么写
package com.dataMonitor.bo.common;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONObject;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.http.HttpEntity;
❺ c#webapi 怎么接受表单参数
用ajax进行传参
$.ajax({
type: 'post',
dataType: "json",
contentType: "application/json",
url: url,
data: param,
cache: false,
async: false,
success: function (msg) {
callBack(msg);
},
error: function (msg) {
callBack("error");
}
});
其中url:是你后台方法的地址 ,data: param中的param 就是对应的参数
如果你的方法是Function(string a,string b )
那么param就是 {a:"传入的值",b:"传入的值"}
❻ 请问html的js调用webapi接口
引用jquery,有很方便的GET调用方法:
<!DOCTYPEhtml>
<html>
<head>
<metahttp-equiv="content-type"content="text/html;charset=UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1">
<!--src值为文件位置路径-->
<scripttype="text/javascript"charset="UTF-8"src="javascript/jquery-1.12.1.js"></script>
<title>测试案例</title>
<!--语法:jQuery.getJSON(url,data,success(data,status,xhr))-->
<scripttype="text/javascript"charset="UTF-8">
functiongetToken(){
$.getJSON("http://localhost/kdapi/api/access_token",{"id":111,"secret":2352532},function(result){
alert(result.access_token);
});
}
</script>
</head>
<body>
<buttononclick="getToken()"style="width:120px;height:60px;">获取Token</button>
</body>
</html>
❼ c#mvc中的webapi怎么迫使服务端返回字符串
返回值是string就好了。
publicstringGet(intid)
{
return"字符串";
}
用AJAX取json格式的就是这样的。