首页 新闻 会员 周边 捐助

asp.net webapi Delete操作响应请求?

0
[已解决问题] 解决于 2014-01-13 08:50

我遇到一个问题,请求webapi中的四个动作方法,当地址是这样时:http://localhost:9183/api/subjects/3,只能响应Get(int id)动作,Delete(int id)怎么都不能得到返回值,意即不能进入方法内部,求解释?

  动作方法如下:

public class SubjectsController : ApiController
{
SubjectsManage subManage = null;
/// <summary>
/// 专题数据的业务管理对象
/// </summary>
SubjectsManage SubManage
{
get
{
if (subManage == null) subManage = new SubjectsManage();
return subManage;
}
}

 

// GET api/subjects/5
public Subjects Get(int id)
{
Subjects sub = new Subjects();
if (id > 0)
{
sub = SubManage.GetOneSubjects(id);
}
return sub;
}

 

// DELETE api/subjects/5
public void Delete(int id)
{
if (id > 0)
{
SubManage.Delete(id);
}
}

}

目前查到的原因:说跟webconfig的设置有关,IIS  post请求有关,没搞定,需要怎么设置?网上给的方法试过了,配置文件加上:

<modules runAllManagedModulesForAllRequests="true">
</modules>

问题补充:

通过设置IIS服务器也可以达到要求,未找到设置办法

yss小虾米的主页 yss小虾米 | 菜鸟二级 | 园豆:238
提问于:2013-12-09 09:24
< >
分享
最佳答案
0

不管是post还是get请求都是在request head里设置的吧

奖励园豆:5
Rookier | 小虾三级 |园豆:652 | 2013-12-09 09:56

HttpClient httpClient = new HttpClient(HttpClientHandler);
//默认接受json格式
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

是的,但是还不清楚要怎么设置,一会我做一个demo以post的方式提交一个表单,看看能(delete动作)接收到吗?

yss小虾米 | 园豆:238 (菜鸟二级) | 2013-12-09 09:59
其他回答(4)
0

Head.Method = Delete

改变头信息的吧

James.Ying | 园豆:1472 (小虾三级) | 2013-12-09 09:39

谢谢你,我一会验证一下提交post请求可以响应不

支持(0) 反对(1) yss小虾米 | 园豆:238 (菜鸟二级) | 2013-12-09 09:55
0

HttpClient.DeleteAsync

Launcher | 园豆:45050 (高人七级) | 2013-12-09 17:46
3

选择生成读写方法webapi会生成四个读写的方法(CRUD),两个获取数据的、一个更新、一个删除,默认情况下更新和删除是不对外开外的,原因是安全问题,试想一下,可以删除数据,小A用户一次请求服务器所有的数据被删除了。但是可以通过简单的配置接收更新删除的请求,如下所示:

<system.webServer>
<!--以下配置为了让IIS7+支持Put/Delete方法-->
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
<!--IIS7/7.5上必须加这个配置,否则访问报错-->
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" resourceType="Unspecified" requireAccess="Script" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" resourceType="Unspecified" requireAccess="Script" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" resourceType="Unspecified" requireAccess="Script" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

<!--提高GET URL长度限制上限-->
<security>
<requestFiltering>
<requestLimits maxUrl="409600" maxQueryString="204800" />
</requestFiltering>
</security>

</system.webServer>

yss小虾米 | 园豆:238 (菜鸟二级) | 2013-12-17 09:21

专程登录感谢。解决了我的问题。

支持(0) 反对(0) VincentZR | 园豆:200 (初学一级) | 2014-12-03 01:49

专程登录感谢。解决了我的问题。

支持(0) 反对(0) EugeneLi | 园豆:200 (初学一级) | 2015-04-24 11:07
0

表示我也很想知道如何分别调用get和delete方法

蓝兰的天 | 园豆:202 (菜鸟二级) | 2014-08-15 21:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册