猿问

我如何从 .NET CORE API 返回警告消息

我在客户端使用 Angular。我在服务器端使用 .NET CORE WEB API,并使用 SQL Server 作为数据库。我的 WEB API 有层次。业务逻辑层为我执行数据库 dml 操作,并且我能够执行 get 和 post http 客户端操作。但我必须检查业务逻辑层中的数据,如果数据格式错误,我想在客户端上显示错误,例如“此电话号码格式错误。请输入正确的格式”。我正确执行了 DML(INSERT、SELECT)操作。我需要返回错误消息的帮助,并且我想向用户显示此错误消息。


这是 .NET Core Web API PersonController.cs


    [Route("api/[controller]")]

    [ApiController]

    [EnableCors(origins: "http://example.com", headers: "*", methods: "*")]

    public class PersonController : ControllerBase

    {

        FihristBLL bll = new FihristBLL();


        // GET: api/Person

        [HttpGet]

        public List<Person> Get()

        {

            return bll.GetNumbers();

        }



        // POST: api/Person

        [HttpPost]

        public void Post([FromBody] Person person)

        {

            bll.AddNumber(person);

        }

    }

}

这是执行数据库操作的业务逻辑层


    public class FihristBLL

    {

        public void AddNumber(Person person)

        {



                if (person.PhoneNumber.Substring(0, 1) != "5" || 0 % Convert.ToInt64(person.PhoneNumber) != 0)

                {

                // WRONG FORMAT



                }


                else

                {

                    // CORRECT FORMAT      

                    FihristDAL db = new FihristDAL();

                    SqlConnection conn = db.OpenConnection();

                    string command = "INSERT INTO Persons (PhoneNumber,FirstName,LastName) VALUES (@phoneNumber,@firstName,@lastName)";

                    SqlCommand sqlCommand = db.CreateConnection(command);

                    sqlCommand.Parameters.AddWithValue("@phoneNumber", person.PhoneNumber);

                    sqlCommand.Parameters.AddWithValue("@firstName", person.FirstName);

                    sqlCommand.Parameters.AddWithValue("@lastName", person.LastName);

                    sqlCommand.ExecuteNonQuery();

                    conn.Close();



                }     

        }

    }

}

操作完美,工作正常。但我需要返回错误消息,例如“您刚刚输入了格式错误的电话号码”。并在 Angular 上显示此消息。


杨魅力
浏览 137回答 4
4回答

慕田峪7331174

快速响应是抛出一个ArgumentException带有验证错误描述的错误,在控制器级别捕获它并将其映射到错误响应中,并以异常消息作为内容:var validPhoneNumber = //your validation logic stuffif (!validPhoneNumber ){   throw new ArgumentException("Invalid phone number");}[HttpPost]public IActionResult Post([FromBody] Person person){    try{      bll.AddNumber(person);    }catch(ArgumentException argumentEx){       return BadRequest(new {Message = argumentEx.Message});    }    // A better approach would be to return the created resource at this point    return this.NoContent();}在角度方面,错误有效负载应该在 的实例中可用HttpResponseError。

catspeake

您可以使用该模型并将其返回。public class Response<T>{&nbsp; &nbsp; &nbsp; &nbsp; public Response(bool defalut = false)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IsSuccess = defalut;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Message = "";&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; public Response(string message)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IsSuccess = false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Message = message;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; public bool IsSuccess { get; set; }&nbsp; &nbsp; &nbsp; &nbsp; public string Message { get; set; }&nbsp; &nbsp; &nbsp; &nbsp; public T Data { get; set; }}

慕丝7291255

我会尝试将验证逻辑封装在一个对象中,序列化该对象并将其发送到 Angular,然后在 Angular 中检查一切是否正常,然后继续,否则显示一些错误消息。

精慕HU

当格式错误时,您可以抛出异常并简单地返回HttpResponseMessage ,如下所示:[HttpPost]public void Post([FromBody] Person person){    try     {        bll.AddNumber(person);    }    // Replace with own exception    catch (FormatException e)    {        return new HttpResponseMessage(HttpStatusCode.BadRequest)        {            ReasonPhrase = "Phone number is not correctly formatted"        };    }    return new HttpResponseMessage(HttpStatusCode.OK);}
随时随地看视频慕课网APP
我要回答