起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1890|回复: 8

[处理中3] 关于Baas.net中UrlController的HttpModules类bug

[复制链接]

24

主题

43

帖子

99

积分

初级会员

Rank: 2

积分
99
QQ
发表于 2017-6-21 13:53:01 | 显示全部楼层 |阅读模式
感觉你们没有用心写。net部分的后台啊,bug太多了。
这里的代码永远执行不到的,因此Baas.net的热更新没用的。
foreach (var rootPath in pathArray)
            {
                var requestPath = context.Request.Path;
                var latePath = GetLatePath(rootPath);
                var firstIndex = requestPath.IndexOf(latePath, StringComparison.Ordinal);//latePath改为effectivePrefixPath
                var secondIndex = requestPath.LastIndexOf(latePath, StringComparison.Ordinal);
                if (latePath == "/")
                {
                    firstIndex = secondIndex;
                }

                if (!requestPath.StartsWith(effectivePrefixPath) && firstIndex == 0)
                {
                    var newUrl = rootPath + pathMap[rootPath].LatestVersion;

                    if ((requestPath == rootPath + "indexUrl_in_server.txt"))
                    { }
                    else if (requestPath == rootPath)
                    {
                        //context.RewritePath(requestPath.Replace(rootPath, requestPath + pathMap[rootPath].URL));
                        context.Response.Redirect(requestPath.Replace(rootPath, rootPath + pathMap[rootPath].URL));
                        //context.RewritePath(requestPath + pathMap[rootPath].PreQueryString, pathMap[rootPath].QueryObject, pathMap[rootPath].SuffixQueryString);
                    }
                    else if (new[] { "2", "3" }.Contains(pathMap[rootPath].Pattern))
                    {
                        if (!requestPath.Contains(newUrl))
                        {
                            var userPath = string.Empty;
                            if (requestPath.LastIndexOf('/') != -1)
                            {
                                userPath = requestPath.Substring(0, requestPath.LastIndexOf('/'));
                            }

                            if (!string.IsNullOrEmpty(userPath) && userPath == rootPath)
                            {
                                var questionIndex = requestPath.IndexOf("?", StringComparison.Ordinal);
                                string filePathAndName;
                                if (questionIndex != -1)
                                {
                                    filePathAndName = requestPath.Substring(0, questionIndex);
                                }
                                else
                                {
                                    filePathAndName = requestPath;
                                }

                                var realFile = AppDomain.CurrentDomain.BaseDirectory + filePathAndName.Replace('/', '\\');
                                if (!File.Exists(realFile))
                                {
                                    context.Response.Redirect(rootPath + pathMap[rootPath].URL);
                                }
                            }
                            else if (secondIndex > firstIndex)
                            {
                                context.Response.Redirect(requestPath.Substring(0, firstIndex + rootPath.Length) +
                                                          pathMap[rootPath].LatestVersion +
                                                          requestPath.Substring(secondIndex));
                            }
                            else
                            {
                                context.Response.Redirect(rootPath + pathMap[rootPath].URL);
                                //context.RewritePath(requestPath.Replace(rootPath, newUrl + "/"));
                            }
                        }
                    }
                    else if (pathMap[rootPath].Pattern == "1")
                    {
                        var questionIndex = requestPath.IndexOf("?", StringComparison.Ordinal);
                        string filePathAndName;
                        if (questionIndex != -1)
                        {
                            filePathAndName = requestPath.Substring(0, questionIndex);
                        }
                        else
                        {
                            filePathAndName = requestPath;
                        }

                        var realFile = AppDomain.CurrentDomain.BaseDirectory + filePathAndName.Replace('/', '\\');
                        if (!File.Exists(realFile))
                        {
                            context.Response.Redirect(rootPath + pathMap[rootPath].URL);
                        }
                    }

                    break;
                }
            }
发表于 2017-6-21 14:05:54 | 显示全部楼层
.net 和 php 的baas维护力度确实不够!目前这两块都需要开发者自己研究!
baasServer 只是做数据交互用的!就是简单增删改查!并没有 提供热更新的能力啊!

资源更新是UI资源,和baas是分类的没关系的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

24

主题

43

帖子

99

积分

初级会员

Rank: 2

积分
99
QQ
 楼主| 发表于 2017-6-21 14:15:35 | 显示全部楼层
liangyongfei 发表于 2017-6-21 14:05
.net 和 php 的baas维护力度确实不够!目前这两块都需要开发者自己研究!
baasServer 只是做数据交互用的! ...

我说的热更新是指html 部分的资源更新,不是指cordova等。因为不可能html和js做些修改就要求用户重装app,所以这个很重要。我一直都用Cordova+H5自己开发的速度有点慢,想找个框架,应付小项目快点。我知道你们主要是java做后台的冲BeX5就知道了,主要技术就是java。可是我们又是.net C#为主的。麻烦了。
回复 支持 反对

使用道具 举报

24

主题

43

帖子

99

积分

初级会员

Rank: 2

积分
99
QQ
 楼主| 发表于 2017-6-21 14:19:16 | 显示全部楼层
然后我看了你们框架2天还不是太熟,如果我自己写后台接管的话功能部分不会有问题,就是这个资源更新,我原来是用cordova-hot-code-push这个插件更新的,现在你们这个架构我也不知道行不行了。
回复 支持 反对

使用道具 举报

发表于 2017-6-21 14:52:22 | 显示全部楼层
Kok_Lu 发表于 2017-6-21 14:19
然后我看了你们框架2天还不是太熟,如果我自己写后台接管的话功能部分不会有问题,就是这个资源更新,我原 ...

x5打包的资源部署本来就是支持热更新的啊!  就是UI 层本身实现的!和 后台 java或 C# 代码没有任何关系的!

你没发现,每次重新编译资源以后,资源版本号都是不一样的吗??,
APP请求服务器发现资源版本不一样!就会自定进行资源更新的!

关于资源更新的设置
http://docs.wex5.com/app-resources-and-version-update/

模式1和模式2资源更新的差异
http://docs.wex5.com/wex5-app-question-list-2041

都和后台代码没关系的!资源更新是APP 自己实现的能力!他会去比较版本号!


qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

24

主题

43

帖子

99

积分

初级会员

Rank: 2

积分
99
QQ
 楼主| 发表于 2017-6-21 16:12:58 | 显示全部楼层
liangyongfei 发表于 2017-6-21 14:52
x5打包的资源部署本来就是支持热更新的啊!  就是UI 层本身实现的!和 后台 java或 C# 代码没有任何关系 ...

App总要获取服务器上UI资源的版本吧,出问题就在这里啊,appMetadata_in_server.json这个文件是标记版本信息的吧,而读取这个的类就在上面写的HttpModule里啊,每次请求都要执行的,这个文件出问题,你发的两个链接方法就失效了
回复 支持 反对

使用道具 举报

发表于 2017-6-21 16:19:35 | 显示全部楼层
Kok_Lu 发表于 2017-6-21 16:12
App总要获取服务器上UI资源的版本吧,出问题就在这里啊,appMetadata_in_server.json这个文件是标记版本 ...

链接没失效!可能你网络问题!我这里可以点开的!
客户端直接请求的appMetadata_in_server.json  不需要服务器端执行的!
客户端请求到appMetadata_in_server.json 以后  直接就在客户端比较版本了!已经资源版本更新

和服务器baas资源没有关系的!

就算一个app应用,没有提供baasServer ,只有UI资源!
比如仿途牛,淘宝
根本就不存在baasServer,也不需要部署baasServer
也可以进行资源更新和版本更新的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

24

主题

43

帖子

99

积分

初级会员

Rank: 2

积分
99
QQ
 楼主| 发表于 2017-6-21 16:32:12 | 显示全部楼层
liangyongfei 发表于 2017-6-21 16:19
链接没失效!可能你网络问题!我这里可以点开的!
客户端直接请求的appMetadata_in_server.json  不需要 ...

<!-- URLModule为Justep资源URL版本过滤 -->
      <add name="URLModule" type="baas.HttpModule, UrlController"/>
这个是baas.net的web.config的配置
而baas.HttpModule有问题
现在这个过滤失效了,你觉得没问题?
回复 支持 反对

使用道具 举报

发表于 2017-6-21 16:52:29 | 显示全部楼层
Kok_Lu 发表于 2017-6-21 16:32
这个是baas.net的web.config的配置
而baas.HttpModule有问题
现在这个过滤失效了,你觉得没问题 ...

可能是旧版本的原因吧!
.net 和 php 很久没更新了,
但是我可以确定的是,app版本更新和资源更新,和baasServer是毫无关系的!

如果你是想要这个能力!,可以不必关系baas中的代码!
或者你可以测试一下!只部署UI资源也是能 进行资源更新的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-6-24 16:57 , Processed in 0.056807 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表