【问题标题】:using HttpPost annotation? Fix so it does not break page使用 HttpPost 注释?修复它不会破坏页面
【发布时间】:2014-09-05 06:07:09
【问题描述】:

我正在构建一个 MVC 电子邮件表单,教程页面上的所有内容都可以正常工作,除非我保留 [HttpPost] 分页符。

我不认为我忘记了导入。

什么会解决这个问题,这样电子邮件表单才会发布,或者[HttpPost] 不会导致错误? 我也试过[System.Web.Mvc.HttpPost]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Net.Mail;
using System.Text;
using SW.Models;

namespace SW.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            //ViewBag.Message = "Your application description page.";

            return View();
        }

        //[System.Web.Mvc.HttpPost]
        public ActionResult Contact(ContactModels c)
        {
            //ViewBag.Message = "Your contact page.";
            if (ModelState.IsValid)
            {
                try
                {
                    MailMessage msg = new MailMessage();
                    SmtpClient smtp = new SmtpClient();
                    MailAddress from = new MailAddress(c.Email.ToString());
                    StringBuilder sb = new StringBuilder();
                    msg.To.Add("mail@hotmail.com");
                    msg.Subject = "Contact Us";
                    msg.IsBodyHtml = false;
                    smtp.Host = "mail.mail.com";
                    smtp.Port = 25;
                    sb.Append("First name: " + c.FirstName);
                    sb.Append(Environment.NewLine);
                    sb.Append("Last name: " + c.LastName);
                    sb.Append(Environment.NewLine);
                    sb.Append("Email: " + c.Email);
                    sb.Append(Environment.NewLine);
                    sb.Append("Comments: " + c.Comment);
                    smtp.Send(msg);
                    msg.Dispose();
                    return View("Success");
                }
                catch (Exception)
                {
                    return View("Error");
                }
            }
            return View();
        }
    }
}

当我转到联系人时,我得到了错误:

“/”应用程序中的服务器错误。

找不到资源。

描述:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的网址:/Home/Contact

版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.18446

【问题讨论】:

  • 你遇到了什么错误?
  • Contact 需要同时使用POSTGET 的问题吗? IE。如果添加帖子注释,获取联系页面不再有效?

标签: c# http


【解决方案1】:

在不知道您收到什么错误消息的情况下很难确定,但我认为这就是问题所在:您需要为 Contact() 操作提供单独的 GET 和 POST 方法。 GET 处理您正在查看联系页面的情况。 POST 处理您提交表单的情况。

它可能看起来像这样:

    [System.Web.Mvc.HttpGet]
    public ActionResult Contact()
    {
        return View(new ContactModels());
    }

    [System.Web.Mvc.HttpPost]
    public ActionResult Contact(ContactModels c)
    {
        //ViewBag.Message = "Your contact page.";
        if (ModelState.IsValid)
        {
            try
            {
                MailMessage msg = new MailMessage();
                SmtpClient smtp = new SmtpClient();
                MailAddress from = new MailAddress(c.Email.ToString());
                StringBuilder sb = new StringBuilder();
                msg.To.Add("mail@hotmail.com");
                msg.Subject = "Contact Us";
                msg.IsBodyHtml = false;
                smtp.Host = "mail.mail.com";
                smtp.Port = 25;
                sb.Append("First name: " + c.FirstName);
                sb.Append(Environment.NewLine);
                sb.Append("Last name: " + c.LastName);
                sb.Append(Environment.NewLine);
                sb.Append("Email: " + c.Email);
                sb.Append(Environment.NewLine);
                sb.Append("Comments: " + c.Comment);
                smtp.Send(msg);
                msg.Dispose();
                return View("Success");
            }
            catch (Exception)
            {
                return View("Error");
            }
        }
        return View();
    }

如果您只有一个具有 HttpPost 属性的方法,则它仅适用于 HTTP POST 请求,因此尝试在 Web 浏览器中 HTTP GET 页面将失败。

【讨论】:

    【解决方案2】:

    没有属性的操作默认是 GET 方法。如果您将显式 HttpPost 属性添加到您的方法中,它将不再适用于 GET 请求,例如首先显示联系人页面。

    您可以使用[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)] 属性语法来允许两者。

    【讨论】:

      【解决方案3】:

      您必须同时拥有 Get 和 Post 操作,或者删除 HttpPost 属性并将您的表单方法分配给“GET”。

      【讨论】:

        猜你喜欢
        • 2011-11-02
        • 1970-01-01
        • 2011-01-15
        • 2023-03-14
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 2015-08-23
        • 1970-01-01
        相关资源
        最近更新 更多