我正在尝试构建这个在线食品订购应用程序。当使用Postman在控制器中测试HttpPost方法时,我期望布尔值为true,但不断得到对应于它为false的消息。
这是我的Web服务模型。
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace OnlineFoodOrderWebService.Models
{
public class Item
{
[Required]
public int CategoryId { get; set; }
[Required]
public string ItemId { get; set; }
[Required, StringLength(50, MinimumLength = 4)]
public string ItemName { get; set; }
[Required]
public decimal Price { get; set; }
}
}
这是我的DAL模型
using System;
using System.Collections.Generic;
#nullable disable
namespace OnlineFoodOrderDALCrossPlatform.Models
{
public partial class Item
{
public Item()
{
Orders = new HashSet<Order>();
}
public string ItemId { get; set; }
public string ItemName { get; set; }
public int CategoryId { get; set; }
public decimal Price { get; set; }
public virtual Category Category { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
}
这是我仓库里的相应方法
public bool AddItem(Item newItem)
{
bool status = false;
try
{
context.Items.Add(newItem);
context.SaveChanges();
status = true;
}
catch (Exception)
{
status=false;
}
return status;
}
这是我的控制器类的方法。
[HttpPost]
public JsonResult AddItem(Models.Item item)
{
bool status = false;
string message;
try
{
Item newItem = new Item
{
CategoryId = item.CategoryId,
ItemId = item.ItemId,
ItemName = item.ItemName,
Price = item.Price,
};
status = repository.AddItem(newItem);
if (status)
{
message = "Successful add of new Item";
}
else
{
message = "Failed to add new Item";
}
}
catch (Exception)
{
message = "Something went wrong, try again.";
}
return Json(message);
}
当我在 Postman 测试时,我应该会得到“成功添加新项目”,但一直得到“未能添加新项目”。我已经尝试了很多不同的事情,但没有运气。任何帮助都将是伟大的!
这是我张贴在 Postman 的方式
{
"CategoryId": 1,
"ItemId": "abc123",
"ItemName": "My Item",
"Price": 19.99
}
我得到的例外是
“SQL异常:表“OnlineFoodOrderDB.dbo. Items”的列“ItemId”中的字符串或二进制数据将被截断。截断的值:'123'”。
3条答案
按热度按时间8zzbczxx1#
您需要记录异常,而不是仅仅丢弃它并将
status
设置为false。我猜你会在那里找到你的问题。
ilmyapht2#
AddItem()抛出异常。如果您调试或显示抛出的异常,例如添加以下代码,将非常有帮助:
guykilcj3#
根据您共享的异常消息,问题在于您为
ItemId
指定的值比您的模式支持的最大值长。由于它被截断为123,因此可以安全地假设该类型最多支持3个字符。
在
如果你想的话,你可以自己做截断,但是,如果你要存储“12345”,那么你最终会得到“123”。
或者,您可以验证您的值,例如
或者,您可以更改模式以更改数据库中
ItemId
的类型,从而允许它保存更长的值,例如:无论您选择哪种解决方案,明智的做法是确保在
try
的catch
块中正确处理Exception
,将其记录在某个地方或以某种方式显示出来,以便下次遇到此类问题时,您可以更轻松地解决它。