相关疑难解决方法(0)

Web API复杂参数属性均为null

我有一个Web API服务调用,用于更新用户的首选项.不幸的是,当我从jQuery ajax调用调用此POST方法时,请求参数对象的属性始终为null(或默认值),而不是传入的内容.如果我使用REST客户端调用相同的方法(我使用Postman) ,它工作得很漂亮.我无法弄清楚我做错了什么,但希望有人见过这个.这很简单......

这是我的请求对象:

public class PreferenceRequest
{
    [Required]
    public int UserId;

    public bool usePopups;
    public bool useTheme;
    public int recentCount;
    public string[] detailsSections;
}
Run Code Online (Sandbox Code Playgroud)

这是UserController类中的控制器方法:

    public HttpResponseMessage Post([FromBody]PreferenceRequest request)
    {
        if (request.systemsUserId > 0)
        {
            TheRepository.UpdateUserPreferences(request.UserId, request.usePopups, request.useTheme,
                                         request.recentCount, request.detailsSections);

            return Request.CreateResponse(HttpStatusCode.OK, "Preferences Updated");                
        }
        else
        {
            return Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, "You must provide User ID");
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我的ajax电话:

var request = {
    UserId: userId,
    usePopups: usePopups,
    useTheme: useTheme,
    recentCount: recentCount,
    detailsSections: details
};

$.ajax({
    type: "POST",
    data: request,
    url: …
Run Code Online (Sandbox Code Playgroud)

c# ajax jquery json asp.net-web-api

38
推荐指数
3
解决办法
4万
查看次数

ASP.NET Web API和[Serializable]类

我有一个标有[Serializable]的类.当我从Web API返回它时,字段名称都很时髦.

通常返回的JSON是

[{"OrderId":797 ...
Run Code Online (Sandbox Code Playgroud)

使用[Serializable]时返回JSON

[{"<OrderId>k__BackingField":797 ...
Run Code Online (Sandbox Code Playgroud)

我不想将其标记为可序列化以使用BinaryFormatter进行缓存.除了编写自定义序列化程序或制作一个不可序列化的双胞胎并编写猴子代码以在两者之间"施放"之外,还有其他方法吗?

.net c# asp.net-mvc serializable asp.net-web-api

12
推荐指数
1
解决办法
7488
查看次数

标签 统计

asp.net-web-api ×2

c# ×2

.net ×1

ajax ×1

asp.net-mvc ×1

jquery ×1

json ×1

serializable ×1