傳統 WebForm (`*.aspx`) 處理 AJAX 請求存在生命周期開銷大、ViewState 干擾、難以返回純 JSON 等問題。推薦使用 **Generic Handler (`*.ashx`)** 或 **Web API** 作為 AJAX 端點。
<%@ WebHandler Language="C#" Class="LoginHandler" %>
using System.Web;
using System.Web.Script.Serialization;
public class LoginHandler : IHttpHandler {
public void ProcessRequest(HttpContext context) {
context.Response.ContentType = "application/json";
var username = context.Request["username"];
var password = context.Request["password"];
// 業務驗證邏輯
bool success = Membership.ValidateUser(username, password);
var result = new { success, message = success ? "登錄成功" : "用戶名或密碼錯誤" };
context.Response.Write(new JavaScriptSerializer().Serialize(result));
}
public bool IsReusable => false;
}
$('#btnLogin').click(function() {
$.post('LoginHandler.ashx', {
username: $('#txtUser').val(),
password: $('#txtPwd').val()
}, function(res) {
if (res.success) {
// 登錄成功:存儲用戶名並跳轉
sessionStorage.setItem('username', $('#txtUser').val());
location.href = 'Welcome.aspx';
} else {
alert(res.message);
}
}, 'json');
});
// Welcome.aspx 頁面加載時
<script>
document.getElementById('welcome').textContent =
sessionStorage.getItem('username') + ',您好!';
</script>
[RoutePrefix("api/auth")]
public class AuthController : ApiController {
[HttpPost, Route("login")]
public IHttpActionResult Login(LoginDto dto) {
if (Membership.ValidateUser(dto.Username, dto.Password))
return Ok(new { token = JwtHelper.Generate(dto.Username) });
return BadRequest("Invalid credentials");
}
}
Web API 原生支援屬性路由、模型綁定、內容協商、OAuth/JWT,是現代 ASP.NET 應用的標準選擇。