小喵前一篇【WebAPI 设定多组 (Multiple) 跨 Domain】,测试实主要是透过 jQuery 的 getJSON 来处理,实际上进一部使用 $.Ajax 的时候,又遇到了【Status Code : 405 Method Not Allowed】的状况。那么这个状况到底要如何处理呢?我们看下去~
缘起
小喵前一篇【WebAPI 设定多组 (Multiple) 跨 Domain】,测试实主要是透过 jQuery 的 getJSON 来处理,实际上进一部使用 $.Ajax 的时候,又遇到了【Status Code : 405 Method Not Allowed】的状况。那么这个状况到底要如何处理呢?我们看下去~
jQuery Ajax CORS OPTIONS
当我们使用 jQuery 的 $.Ajax ,并且他是透过 CORS 跨网域 (Domain) 调用远端的 Web API, WCF, …,无论我们在使用 Ajax 时设定 type 是 GET / POST ,实际上观察 Ajax 会先使用 OPTIONS 这个 Method 去问这个远端的资源是否可以使用,同时传递 Header Origin 去问是否可以进行。如果可以允许,然后才是 type 里面设定的 Method 来进行访问。
WebAPI Controller
当我们访问的远端资源是【WebAPI】,WebAPI 的特性就会在 Controller 里面去找对应的 Action (Request Method),但是我们并没有撰写【OPTIONSxxxx】的 Function 在 Controller 里面,于是就返回【Status Code : 405 Method Not Allowed】。
WebAPI 解决方式:在 WebAPI 中新增【OPTIONSxxxx】
在了解原因之后,处理方式就很简单了,写个针对 OPTIONS 这样 Action 的 Function,回传值内容不重要,回传个简单的字符串即可
因此小喵在 WebAPI 中,新增以下的 Action 对应 Function,让他正常的响应 Status : 200,那么 jQuery 的 Ajax 就可以继续下去,执行 type 设定的 Method
Public Function OPTIONSValue() As String
Return "OPTIONS"
End Function
末记
这篇主要的对象,远端服务的方式是【WebAPI】,在寻求相关问题的解决方式过程中,发现除了【WebAPI】以外,其实 WCF 也会有类似的问题【Status Code : 405 Method Not Allowed】,解决的方式不太相同,不过这就不是本编要讨论的范围内了。
以下是签名:
欢迎转贴本站的文章,不过请在贴文主旨上加上【转贴】,并在文章中附上本篇的超链接与站名【topcat 姗舞之间的极度凝聚】,感恩大家的配合。
小喵大部分的文章会以小喵熟悉的语言 VB.NET 撰写,如果您需要 C# 的 Code,也许您可以试着用线上的工具进行转换,这里提供几个参考
http://converter.telerik.com/
http://www.carlosag.net/tools/codetranslator/
http://www.developerfusion.com/tools/convert/vb-to-csharp/
Visual Studio and Development Technologies
(2005~Now)
topcat
Blog:http://www.dotblogs.com.tw/topcat