当前位置: 首页 > 面试题库 >

如何在ASP.NET MVC中处理“ OPTIONS方法”

牛凌
2023-03-14
问题内容

我的Sencha Touch应用正在将表单发布到我的 WebService上,但不是发送POST而是发送OPTIONS

我在这里读取了类似的线程,但是我只是不知道如何OPTIONS在代码中处理该方法。

我确实尝试将[AllowAjax]属性添加到Action中,但是MVC3中似乎不存在该属性。

选项/ GetInTouch / CommunicateCard HTTP / 1.1
主机:webservice.example.com
引用 网址
:http://192.168.5.206/
Access-Control-Request-Method:POST
来源:http://192.168.5.206
用户代理:Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_7_0)AppleWebKit /
534.24(KHTML,例如Gecko)Chrome / 11.0.696.71 Safari / 534.24
访问控制请求标头:X-Requested-With,内容类型
接受: /
接受编码: gzip,deflate,sdch
接受语言:en-US,zh; q = 0.8
接受字符集:ISO-8859-1,utf-8; q = 0.7,*; q = 0.3

在我的ActionMethod中,我正在使用以下代码。

    public JsonpResult CommunicateCard(CommunicateCard communicateCard)
    {

        // Instantiate a new instance of MailMessage
        MailMessage mMailMessage = new MailMessage();

        // removed for security/brevity

        // Set the body of the mail message
        mMailMessage.Body = communicateCard.name; // THIS IS CURRENTLY BLANK :-(

        // removed for security/brevity
        mSmtpClient.Send(mMailMessage);

        // do server side validation on form input
        // if it's valid return true
        // else return false
        // currently returning NULL cuz I don't care at this point.
        return this.Jsonp(null);
    }

问题答案:

原来我必须创建一个 ActionFilterAttribute

namespace WebService.Attributes
{
    public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            HttpContext.Current.Response.Cache.SetNoStore();

            filterContext.RequestContext.HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");

            string rqstMethod = HttpContext.Current.Request.Headers["Access-Control-Request-Method"];
            if (rqstMethod == "OPTIONS" || rqstMethod == "POST")
            {
                filterContext.RequestContext.HttpContext.Response.AppendHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
                filterContext.RequestContext.HttpContext.Response.AppendHeader("Access-Control-Allow-Headers", "X-Requested-With, Accept, Access-Control-Allow-Origin, Content-Type");
            }
            base.OnActionExecuting(filterContext);
        }
    }
}


 类似资料:
  • 问题内容: 看来我应该这样做: 通过将其设置为来配置dispatcherServlet 但是,考虑到我没有XML配置,或者代码中没有任何各种初始化程序类(此答案提到),该怎么做? 在一个类中,我有一个像这样的方法,当前不会被调用。 Spring Boot 1.2.7.RELEASE; 一个简单的设置与Spring REST指南并没有太大区别 。 问题答案: 选项1:Spring Boot属性(仅适

  • 每次编译代码时,我都会收到这样一条消息:“用法:PApplet[options][sketch args]请参阅Javadoc for PApplet以获取解释。”我使用的代码是通过闪存驱动器从我的旧电脑中导入的,在那台电脑上运行时效果良好。当我试图把文件从SRC打开后,把它放在我的工作区,它没有考虑它是一个项目,所以我把它放在一个新的处理项目中。所以基本上我不确定我是否安装了处理错误或者代码中有

  • 我正在尝试处理错误并为404,403等显示适当的页面。 为此,我制作了一个错误处理过滤器,它可以像预期的那样工作。也就是说,当我试图要求 mysite.com/Home/random_non-existent_action 用户被重定向到我的自定义404页面,并作为响应代码返回404。这同样适用于401和403。 我已经通过错误处理过滤器和在web上进行的修改实现了这一点。配置为: 这就是问题开始

  • 问题内容: 我想要一个文本区域,可以处理按 Tab 键的情况。 在默认情况下,如果您按 Tab 键,则焦点将离开文本区域。但是,当用户想要在文本区域中输入 Tab 键时会怎样呢? 我可以捕捉到此事件并将焦点返回到文本区域并将标签添加到 当前 光标位置吗? 问题答案:

  • 问题内容: 如何在Go界面中处理重复方法? 如果我运行此代码,则会发生以下错误。 如何处理这样的情况?在这种情况下如何避免重复方法? 问题答案: 这样做的方法是显式提供所需的方法,而不是使用速记语法: 这看起来像是代码重复,但是请注意,重复代码在Go中并不是一件不典型的事情,尤其是当它导致更清晰的代码时。 另请注意:如果你想在其他语言中典型的继承权,它可能看起来像你做这个丢失一些信息,因为你没有记

  • 问题内容: 如何用Java 处理? 问题答案: 我不确定“句柄”是什么意思。 您当然可以捕获该错误: 但这很可能是个坏主意,除非您确切地知道自己在做什么。