对于非OK响应,使用IHttpActionResult返回内容的ajax响应

时间:2017-06-01 04:12:44

标签: c# asp.net-web-api asp.net-ajax httpresponse

有没有办法在ajax错误中显示自定义消息?我在服务器端有这个

[HttpPost]
public IHttpActionResult CrearProducto(EProducto Producto)
{
    if (objBLProducto.ObtenerProductoRepetido(Producto, ConnectionStringStore).Count > 0)
    {
        return Content(HttpStatusCode.BadRequest, "Producto repetido"); 
    }
    if (objBLProducto.InsertarProducto(Producto, ConnectionStringStore))
    {
        return Ok(Producto);
    }
    else
    {
        return InternalServerError();
    }
}

在客户端

$.ajax({
    url: "/API/Producto/",
        method: "POST",
        data: EProducto,
        dataType: "json",
        type: "POST",
        success: function () {
            toastr.success("Correcto");
        },
        error: function (jqXHR, textStatus, errorThrown) {
            toastr.error(jqXHR.responseText);
        }
});

但我无法在客户端显示自定义错误。

1 个答案:

答案 0 :(得分:0)

如果您有更好的方法,我找到了解决方案,请告诉我。 服务器端

[HttpPost]
public IHttpActionResult CrearProducto(EProducto Producto)
{
    try
    {
        IHttpActionResult response;
        HttpResponseMessage responseMsg = new HttpResponseMessage(HttpStatusCode.RedirectMethod);
        if (ConnectionStringStore == string.Empty)
        {
            var request = HttpContext.Current.Items["MS_HttpRequestMessage"] as HttpRequestMessage;
            var httpContext = (HttpContextWrapper)request.Properties["MS_HttpContext"];
            ConnectionStringStore = httpContext.Session[EnumSession.Variable.KeyConfig.ToString()].ToString();
        }
        if (objBLProducto.ObtenerProductoRepetido(Producto, ConnectionStringStore).Count > 0) {
            responseMsg.Content = new StringContent("Elemento duplicado");
            response = ResponseMessage(responseMsg);
            return response;
        }
        if (objBLProducto.InsertarProducto(Producto, ConnectionStringStore))
        {
            return Ok(Producto);
        }
        else
        {
            return InternalServerError();
        }
    }
    catch (Exception Ex)
    {
        HelperLog.PutStackTrace(Ex);
        return InternalServerError();
    }
}

客户端

            $.ajax({
                url: "/API/Producto/",
                method: "POST",
                data: EProducto,
                dataType: "json",
                type: "POST",
                success: function () {
                    toastr.success("Correcto");
                },
                error: function (jqXHR, textStatus, customErrorMessage) {
                    toastr.error(jqXHR.responseText);
                }
            })