Google Code Prettify

出現錯誤如下: 415 (Unsupported Media Type)

错误 415 (Unsupported Media Type) 表示服务器拒绝了请求,因为请求的媒体类型不被支持。在 ASP.NET Core 中,这通常意味着你的请求头的 Content-Type 设置不正确或者不匹配服务器期望的格式。


原因及解决方法
在你的 AJAX 请求中,确保 Content-Type 正确设置为 application/x-www-form-urlencoded,因为你使用 serialize() 方法来序列化表单数据。


修改 AJAX 请求
确保你的 Content-Type 设置正确:

javascript
function postPartialView(act, ctl, data) {
    var url = '/' + ctl + '/' + act;
    console.log(url + ' ' + data);
    $.ajax({
        url: url,
        data: data,
        type: 'POST',
        contentType: 'application/x-www-form-urlencoded; charset=UTF-8',  // 设置正确的 Content-Type
        success: function (result) {
            $('#main').html(result);
        },
        error: function (xhr, status, error) {
            console.error('Error loading partial view:', status, error);
        }
    });
}

// 示例数据对象
var data = {
    funSn: 'B12F87CD-B17E-499E-91F1-DF1C9446B062',
    funIsuse: true,
    funSyssn: 'E0FFD7B3-8CF2-462B-A90F-6DB79849FAB4',
    funUpsn: '',
    funNo: 99,
    funName: '99',
    funLeavel: 1,
    funPagename: '122',
    __RequestVerificationToken: $('[name="__RequestVerificationToken"]').val()
};


postPartialView('Update', 'YourController', $.param(data)); // 使用 $.param(data) 序列化数据
确保表单的序列化正确
在你的 HTML 中,确保表单序列化正确:

html
<form id="updateForm" method="post">
    @Html.AntiForgeryToken()
    <input type="text" name="funSn" value="B12F87CD-B17E-499E-91F1-DF1C9446B062" />
    <input type="checkbox" name="funIsuse" checked />
    <input type="text" name="funSyssn" value="E0FFD7B3-8CF2-462B-A90F-6DB79849FAB4" />
    <input type="text" name="funUpsn" value="" />
    <input type="number" name="funNo" value="99" />
    <input type="text" name="funName" value="99" />
    <input type="number" name="funLeavel" value="1" />
    <input type="text" name="funPagename" value="122" />
    <button type="button" onclick="submitForm()">Submit</button>
</form>

<script>
    function submitForm() {
        var formData = $('#updateForm').serialize();
        postPartialView('Update', 'YourController', formData);
    }
</script>


后端控制器
确保控制器方法能够正确处理表单数据:

csharp
[HttpPost]
public async Task Update(EddFunction eddFun) {
    VmdViewmodel vModel = new VmdViewmodel();
    try {
        if (!ModelState.IsValid) {
            throw new Exception($"請確認填寫的資料無誤,然後再次儲存!");
        }
        // 日志调试
        _cLog.WriteEventLog($"funSn: {eddFun.funSn}");
        
        if (string.IsNullOrEmpty(eddFun.funSn)) {
            // 处理逻辑
        } else {
            // 处理逻辑
        }
    } catch (Exception ex) {
        vModel.error_message = "儲存失敗! 請確認填寫的資料.";
        _cLog.WriteEventLog(ex);
        return PartialView(vModel);
    }
    return RedirectToAction("Index", "Function");
}


总结

通过以上方法,确保你的 AJAX 请求头正确设置 Content-Type,并且表单数据序列化为 URL 编码格式发送到服务器。这样可以避免 415 错误,并确保服务器能够正确接收到数据。