c# - 使用 HttpPost 注释?修复它不会破坏页面

标签 c# http

我正在构建一个 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 并确保其拼写正确。

请求的 URL:/Home/Contact

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

最佳答案

如果不知道您收到的错误消息,很难确定,但我认为这就是问题所在:您需要为 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 页面将失败。

关于c# - 使用 HttpPost 注释?修复它不会破坏页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25461936/

相关文章:

c# - 如何在 ios 项目的 Xamarin.Forms 编辑器中添加显示/隐藏密码图像。 (滚动和 UI 放置问题)

c# - 在调试中忽略方法的属性 -

http - 用net/http构建子路由器的好方法

python - 如何打开网页并在python中搜索单词

java - 在 HTTP 模式下,node.js 是否比 Java 具有实质性的性能优势?

java - 利用 Apache HttpClient 的持久性?

c# - 没有 IDynamicMetaObject 的 C# 中的动态?

c# - 良好的设计 DDD 和 IoC,如何将 IRepository 注入(inject)模型

java - 浏览器关闭时 Servlet 长处理取消

c# - 我可以在不使用设计器的情况下创建数据集 XSD 吗?