使用C#对REST api的PUT调用
最近需要添加一个REST的api接口,因为之前url都是丑陋的传参数格式,所以这次想试试目前比较网络比较流行的规范,就是同样的url利用访问方式的不同来执行查询、添加、修改、删除操作。
- GET: 查询数据
- POST:创建数据
- PUT: 修改数据
- DELETE:删除数据
首先是ashx文件部分:
switch (context.Request.RequestType)
{
case "POST":
result = CreateWeiXinPordService(context);
break;
case "PUT":
result = ModifyWeiXinPordService(context);
break;
default:
dt = GetWeiXinPordService(context);
break;
}
由于是修改功能,底层接口都已经实现,于是通过判断请求类型来分别调用不同的接口。
其次是调用:
POST:
using(var client = new WebClient())
{
var values = new NameValueCollection
{
{ "memberPKId", "123"},
{ "beginDate", DateTime.Today.ToString()},
{ "endDate", DateTime.Today.ToString()},
{ "shopState", "1"},
{ "memoInfo", ""},
};
byte[] result = client.UploadValues("http://api.android.xxx.w/wx/ProdService.ashx", "POST", values);
tb.Text = Encoding.ASCII.GetString(result);
}
PUT:
using (var client = new WebClient())
{
var values = new NameValueCollection
{
{ "servicePKId", "5"},
{ "endDate", this.Request["date"].ToString()},
{ "memoInfo", "修改啦"},
};
byte[] result = client.UploadValues("http://api.android.xxx.w/wx/ProdService.ashx", "PUT", values);
tb2.Text = Encoding.ASCII.GetString(result);
}
在测试PUT方式时,页面报405错误,不允许使用该方法。原来IIS默认是不允许PUT动词的,求助了一下网络,这里再次说一下,stackoverflow是个好地方,唯一的缺点是无法注册,发现解决办法如下。
令IIS支持PUT访问方式的方法
- 修改站点的web.config文件,添加以下内容
<system.webServer>
<handlers>
<remove name="WebDAV" />
<remove name="SimpleHandlerFactory-Integrated-4.0" />
<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" resourceType="Unspecified" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<modules>
<remove name="WebDAVModule" />
</modules>
</system.webServer>
其中path可以指定文件,verb也可以指定几个访问方式,我这里是全部放开。
- 修改访问文件的系统权限,添加iis_iuser用户组的修改权限
总结
到这里这个PUT的接口就可以顺利运行了,由于最近使用word发现排版非常不方便且不美观,于是自己试着用马克飞象写了这篇markdown格式的日志,感觉非常方便,就是代码块对C#的支持貌似不够好,但是也非常不错了,希望以后能引入工作中。
C#的路由程序还没研究明白,要不可以将url写的更优雅一点,留到下一次吧。
没有评论:
发表评论