我在解决通过ServiceStack服务html页面和Web服务的ASP MVC应用程序的体系结构时遇到了麻烦.
该应用程序存在于基本URL中,例如" http://myapplication.com ",SS存在于" http://myapplication.com/api "中,因为它是配置两者的最简单方法.
总的来说一切正常,但是当我到达授权和身份验证的一部分时,我就被困住了.
首先,我需要应用程序处理cookie,因为ASP通常会执行FormsAuthentication,并且当使用属性"Authorize"时,用户将通过登录屏幕并使用操作和控制器.这是典型的ASP,所以我没有问题,例如" http://myapplication.com/PurchaseOrders ".
另一方面,我的应用程序的客户端将从javascript使用我的Web服务API.在某些情况下,还会使用ServiceStack的"Authenticate"属性标记这些Web服务.例如," http://myapplication.com/api/purchaseorders/25 "必须验证用户是否可以查看该特定采购订单,否则发送401 Unauthorized,以便javascript可以处理这些情况并显示错误消息.
最后但并非最不重要的是,另一组用户将使用任何外部应用程序(可能是Java或.NET)通过令牌使用我的API.因此,我需要解决两种类型的身份验证,一种使用用户名和密码,另一种使用令牌并使其持久化,因此一旦第一次进行身份验证,下一次调用就可以更快地从API中解决.
这是我到目前为止的代码,我已经非常简单地说明了这个例子.
[HttpPost]
public ActionResult Logon(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
JsonServiceClient client = new JsonServiceClient("http://myapplication.com/api/");
var authRequest = new Auth { provider = CredentialsAuthProvider.Name, UserName = model.UserName, Password = model.Password, RememberMe = model.RememberMe };
try
{
var loginResponse = client.Send(authRequest);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(loginResponse.UserName, false, 60);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
Response.Cookies.Add(cookie);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") …Run Code Online (Sandbox Code Playgroud) 过去两周我一直在玩Golang,最后可以开始真正的应用程序.它使用NGINX提供的静态HTML文件,API使用Goji Web Framework作为后端.我不使用任何Golang模板,因为一切都是Angular.Js,所以静态可以满足我的需求.
我想选择是否在生产中使用NGINX,或者让Go使用应用程序使用的相同端口在root上提供静态内容(8000).这样开发环境就不需要安装NGINX.
所以,尝试像这样添加一个默认多路复用器的句柄
goji.DefaultMux.Handle("/*", serveStatic)
func serveStatic(w http.ResponseWriter, r *http.Request) {
//http.ServeFile(w, r, r.URL.Path[1:])
//http.FileServer(http.Dir("static"))
http.StripPrefix("/static/", http.FileServer(http.Dir("static")))
Run Code Online (Sandbox Code Playgroud)
}
在所有API路径都已注册之后执行此句柄(否则API将无效).
我已经尝试过任何类型的组合,它可以将我重定向到HTTP 404,或者将HTML内容显示为文本.两者都不好.我想知道是否有人来过这里,可以让我了解我做错了什么.
谢谢.
虽然这与我的问题无关,但这里是我正在使用的NGINX配置:
server {
listen 80;
# enable gzip compression
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain application/x-javascript text/xml text/css;
gzip_vary on;
# end gzip configuration
location / {
root /home/mleyzaola/go/src/bitbucket.org/mauleyzaola/goerp/static;
try_files $uri $uri/ /index.html = 404;
}
location /api {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass …Run Code Online (Sandbox Code Playgroud) 我开始玩Jade,我遇到了这个奇怪的问题.我确定这是愚蠢的,但我已经尝试了一个小时没有成功.
我有一个包含组的对象,每个组包含项目.所以,有一个ng-repeat嵌套在另一个里面.
ul.page-sidebar-menu(ng-repeat="group in menuItems")
li(ng-class="group.groupStyle")
a(href="{{group.target}}")
i(ng-class="group.iconStyle")
span.title {{group.name}}
span(ng-class="group.spanStyle")
ul.sub-menu(ng-repeat="item in group.items")
li
a(href="{{item.target}}") {{item.name}}
Run Code Online (Sandbox Code Playgroud)
对象源是这样的:
[
{
name: "Inicio",
target: "/",
groupStyle: {
start: "start",
active: "active"
},
spanStyle: {
selected: "selected"
},
iconStyle: "icon-home"
},
{
name: "Catalogo",
target: "javascript:;",
groupStyle: { },
spanStyle: {
arrow: "arrow"
},
iconStyle: "icon-book",
items: [
{ name: "Clientes", target: "view1" },
{ name: "Rutas", target: "view1" },
{ name: "Transportistas", target: "view1" }
]
},
{
name: …Run Code Online (Sandbox Code Playgroud)