我遇到一个问题,请求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服务器也可以达到要求,未找到设置办法
不管是post还是get请求都是在request head里设置的吧
HttpClient httpClient = new HttpClient(HttpClientHandler);
//默认接受json格式
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
是的,但是还不清楚要怎么设置,一会我做一个demo以post的方式提交一个表单,看看能(delete动作)接收到吗?
Head.Method = Delete
改变头信息的吧
谢谢你,我一会验证一下提交post请求可以响应不
HttpClient.DeleteAsync
选择生成读写方法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>
专程登录感谢。解决了我的问题。
专程登录感谢。解决了我的问题。
表示我也很想知道如何分别调用get和delete方法