Web Api给出错误:500内部服务器错误

时间:2014-08-22 17:23:04

标签: c# javascript .net json asp.net-web-api

情境:

我有一个ASP WebAPI服务,接受email id来检索以前的密码。

但是我遇到了一个问题,如果我输入有效的email Id "Internal server error 500",但如果输入了错误的email Id,那么返回带有错误消息的Json。 (如果输入了无效的email id,那么我的Json会返回错误消息)

所以可以请任何人指导该做什么。

var urll = 'api/BeerAppRetrieve';
   // var urll = 'api/BeerApp';
    var emailId = "anirudh1190@gmail.com";
    //$.getJSON(urll + '/' + data)
    $.getJSON(urll, { "emailId": emailId })
       .done(function (data) {
       })
       .fail(function (jqXHR, textStatus, err) {

           alert("error" + jqXHR.responseText);
           $('#txtUserName').text('Error: ' + err);
       });

我的json电话.. 如果电子邮件ID也有效,我希望该方法被点击.. 请帮忙......

 config.Routes.MapHttpRoute(
                name: "DefaultApi1",
                routeTemplate: "api/{controller}/{emailId}",
                defaults: new { emailId = RouteParameter.Optional }
            );

我的路线配置。

  [EnableCors("*", "*", "GET, POST")]
  public IHttpActionResult GetForgotPassword(String emailId)
  {




MailMessage MyMailMessage = new MailMessage();
        MyMailMessage.From = new MailAddress("beersavo@gmail.com");
        MyMailMessage.To.Add(emailId);
        MyMailMessage.Subject = "Forgot Password";
        MyMailMessage.IsBodyHtml = true;
        BeerAppUserClass beerAppDal = new BeerAppUserClass();
        String passwrd = String.Empty;
        try
        {
            passwrd = beerAppDal.GetUserPassword(emailId);
        }

catch (Exception exw)
{
    return Json(new KeyValuePair<String, String>("MailSend", exw.InnerException.Message));
}

if (!passwrd.Equals(String.Empty))
{


MyMailMessage.Body = "<table><tr><td>" + "Login to the site with:</td></tr> <tr><td>  UserName: </td><td>" + emailId + "</td></tr> <tr><td> Password:</td><td>" + passwrd + "</td></tr></table>";
        SmtpClient SMTPServer = new SmtpClient("smtp.gmail.com");
        SMTPServer.Port = 587;
        //SMTPServer.Host = "smtpout.secureserver.net";
        SMTPServer.Credentials = new System.Net.NetworkCredential("email@gmail.com", "Password@321");
        SMTPServer.EnableSsl = true;
        try
        {
            SMTPServer.Send(MyMailMessage);
            return Json(new KeyValuePair<String, String>("MailSend", "true"));
        }

        catch (Exception ex)
        {


return Json(newKeyValuePair<String,String("MailSend",ex.InnerException.Message));
        }
    }
    return Json(new KeyValuePair<String, String>("MailSend", "empty"));
}
  }

控制器中的操作

1 个答案:

答案 0 :(得分:0)

或许更多的评论......

虽然问题在于路由中包含电子邮件 - 它有一段时间. - 这会丢弃您的路由。我在以前的项目中有完全相同的问题,该项目的电子邮件地址为ID

我敢打赌当你用不好的电子邮件尝试时,你正在尝试的坏字符串没有句号。

使用查询字符串,所以'api / BeerAppRetrieve?theemail = theactual @ email.com`

或更改您的路线配置以接受期间

或者您可以替换电子邮件客户端中的某些字符并将其更改回服务器端(最坏情况)

作为一个超级最坏的情况,你可以在你的web.config中添加以下内容(你应该真的避免这个其他任何请求在你的网站上通过asp.net管道..

<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"> <!-- add this -->

<强>更新

在您的Javascript更改中:

var urll = 'api/BeerAppRetrieve';

到这个

var urll = 'api/BeerAppRetrieve?emailAddress=anirudh1190@gmail.com';

将您的路线改回

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

并将您的API控制器更改为

[EnableCors("*", "*", "GET, POST")]
  public IHttpActionResult GetForgotPassword(String id)
  {
    //my code
  }