为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
杨魅力 2023-09-16 14:58:55
我在客户端使用 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 上显示此消息。
查看完整描述

4 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

快速响应是抛出一个ArgumentException带有验证错误描述的错误,在控制器级别捕获它并将其映射到错误响应中,并以异常消息作为内容:


var validPhoneNumber = //your validation logic stuff

if (!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。


查看完整回答
反对 回复 2023-09-16
?
catspeake

TA贡献1111条经验 获得超0个赞

您可以使用该模型并将其返回。


public class Response<T>

{

        public Response(bool defalut = false)

        {

            IsSuccess = defalut;

            Message = "";

        }


        public Response(string message)

        {

            IsSuccess = false;

            Message = message;

        }


        public bool IsSuccess { get; set; }

        public string Message { get; set; }

        public T Data { get; set; }

}


查看完整回答
反对 回复 2023-09-16
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

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



查看完整回答
反对 回复 2023-09-16
?
精慕HU

TA贡献1845条经验 获得超8个赞

当格式错误时,您可以抛出异常并简单地返回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);

}


查看完整回答
反对 回复 2023-09-16
  • 4 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信